MacからOracleへ接続
Nov 3, 2016 · mac · serverphpdb
MacのPHP5.6から別サーバで動いているOracleのDBへoci8
で接続する方法
CentOSの場合はこちら
手順
Oracleのドライバのインストール
今回はVersion 12.1.0.2 (64-bit)
は選択。手順などはこのバージョンが前提
Oracle Instant Clientから
basic
とSDK
をダウンロード
公式の要件にあるようにOracleDB
とPHP
のバージョンに合ったものを選択1を全て同じフォルダへ解凍する
cd (ダウンロード先) unzip instantclient-basic-macos.x64-12.1.0.2.0.zip unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip
(Ver.12であれば
instantclient_12_1
というフォルダ内に全ファイルが解凍された状態になればOK)
フォルダ名がバージョンになっているので解凍したフォルダ名をそのまま使うこと!2をフォルダごと適当な場所に移動
(今回は/Library/Oracle/
へ移動)ライブラリのシンボリックリンクを作成
cd /Library/Oracle/instantclient_12_1/ ln -s libclntsh.dylib.12.1 libclntsh.dylib
パスを通す
.bash_profile
に以下を追記export DYLD_LIBRARY_PATH=/Library/Oracle/instantclient_12_1 export PATH=$PATH:$DYLD_LIBRARY_PATH
追記したら保存し、
source ~/.bash_profile
で強制反映させる
OCI8をインストール
以下はすでにPHPをインストール済かつPECL
が使えない場合なので、
通常はPHPインストールと同時にしてしまうかPECL
で追加が恐らく楽
(手持ちの環境ではPECL
がなぜか使えなかったので以下の手順)
OCI8(Ver.2.0.12)を
PECL
の該当ページからダウンロード解凍する
cd (ダウンロード先) tar -zxf oci8-2.0.12.tgz
makeする
cd oci8-2.0.12 phpize ./configure -with-oci8=shared,instantclient,/Library/Oracle/instantclient_12_1 make install
modules
の中にoci8.so
ができていればOKライブラリを移動
sudo mv modules/oci8.so /Library/Oracle
(とりあえず今回はここで)
PHPの設定
php.ini
に以下の2つの項目を設定extension_dir = "/Library/Oracle" # oci8.soを置いた場所 extension=oci8.so
(ファイルの場所が判らない時は
php -i | grep php.ini
)設定の確認
php --ri oci8
を実行して、
(略) OCI8 Support => enabled (略) OCI8 Version => 2.0.12 (略) Oracle Run-time Client Library Version => 12.1.0.2.0 Oracle Compile-time Instant Client Version => 12.1
と出ていればOK
PHPからの接続
フレームワークなどを使わずにそのまま接続する場合は、
$user = 'test'; // ユーザ名
$pass = '1234'; // パスワード
$host = '192.168.0.10'; // ホスト
$port = '1521'; // ポート番号
$db = 'sample'; // データベース名(サービス名)
$conn = oci_connect(
$user,
$pass,
'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)'
. '(HOST=' . $host . ')(PORT=' . $port . ')))'
. '(CONNECT_DATA=(SERVICE_NAME=' . $db . ')))']
);
といった感じで接続できる
PHPStormの設定
PHPStorm
から接続したい場合は、Oracle Instant Client
はVer.12以上が必要
設定は以下の感じ
トラブルシューティング
php --ri oci8
で表示されるのにApache
上でうまく動かない場合
Apache
上でphpinfo()
を表示させてoci8
が同じ様に表示されるかを確認
表示されていないければApache Environment
を確認して5で設定した環境変数が入っているか確認
詳細は未検証だが、主にmacのデフォルトのApache
を使っている場合に起こる場合があるので、
その場合は、ここを参照して設定してみる
(デフォルトのApache
のユーザとシェルのユーザが違うのでbash_profile
などではApache
の環境変数を変更できないっぽい)
参考リンク
- PHP公式 Oracle OCI8
- Orcale Instant Client (下の方にインストール方法)
開発環境
- Mac 10.11
- PHP 5.6.27 + OCI8 2.0.12
- Oracle Instant Client 12.1.0.2.0
- DBサーバ OracleDB(Win)