ここでは、PHP ( OCI8 ) から Oracle データベースに接続しているか判定するサンプルコードを掲載しています。なお、本サンプルは ZendFramework-1.11 のソースコードを一部変更して掲載しています。
ライブラリ等の実装はとても参考になりますので、どんどん良い部分は取り入れていくようにしたいものです。
スポンサーリンク
Oracle に接続中か判定する ( oci8 )
Oracle に接続中か判定するサンプルです。接続中か判定する以外にも拡張ライブラリがロードされているかの判定なども参考になります。
class Oracle_Adapter { protected $_connection = null; // Oracle に接続する public function connect($persistent = false, $charset = 'AL32UTF8') { if (!extension_loaded('oci8')) { throw new Exception('OCI8 がロードされていません'); } /* * すでに接続中の場合は何もしない */ if($this->isConnected()) { return; } $funcName = ($persistent == true) ? 'oci_pconnect' : 'oci_connect'; // 一部手抜き(本来はパラメータで設定する) $this->_connection = @$funcName( 'ユーザー名', 'パスワード', 'DB名', $charset); // 接続に成功したか確認する if (!$this->_connection) { $error = oci_error(); $message = $error['code'] . ' ' . $error['message'] throw new Exception($message); } } /* * DBに接続中か確認する */ public function isConnected() { return ((bool) (is_resource($this->_connection) && (get_resource_type($this->_connection) == 'oci8 connection' || get_resource_type($this->_connection) == 'oci8 persistent connection'))); } /* * 接続している場合はDB切断 */ public function close() { if ($this->isConnected()) { oci_close($this->_connection); } $this->_connection = null; } }
接続関数の戻り値がリソース型であるかと、リソースタイプの文字列を確認して、現在 Oracle へ接続中であるかを判定しています。また、一般的かどうかはわかりませんが、データベースへの接続時に extension_loaded 関数によって拡張ライブラリがロードされているも確認しています。開発環境が一旦構築されてしまうと拡張ライブラリロードエラーは出ませんので、必要ないと思われれば外しても良いかもしれません。