MacからOracleへ接続

MacのPHP5.6から別サーバで動いているOracleのDBへoci8で接続する方法

CentOSの場合はこちら

手順

Oracleのドライバのインストール

今回はVersion 12.1.0.2 (64-bit)は選択。手順などはこのバージョンが前提

  1. Oracle Instant ClientからbasicSDKをダウンロード
    公式の要件にあるようにOracleDBPHPのバージョンに合ったものを選択

  2. 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)
    フォルダ名がバージョンになっているので解凍したフォルダ名をそのまま使うこと!

  3. 2をフォルダごと適当な場所に移動
    (今回は/Library/Oracle/へ移動)

  4. ライブラリのシンボリックリンクを作成

    cd /Library/Oracle/instantclient_12_1/
    ln -s libclntsh.dylib.12.1 libclntsh.dylib
    
  5. パスを通す
    .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がなぜか使えなかったので以下の手順)

  1. OCI8(Ver.2.0.12)をPECL該当ページからダウンロード

  2. 解凍する

    cd (ダウンロード先)
    tar -zxf oci8-2.0.12.tgz
    
  3. makeする

    cd oci8-2.0.12
    phpize
    ./configure -with-oci8=shared,instantclient,/Library/Oracle/instantclient_12_1
    make install
    

    modulesの中にoci8.soができていればOK

  4. ライブラリを移動

    sudo mv modules/oci8.so /Library/Oracle 
    

    (とりあえず今回はここで)

  5. PHPの設定 php.iniに以下の2つの項目を設定

    extension_dir = "/Library/Oracle" # oci8.soを置いた場所
    extension=oci8.so
    

    (ファイルの場所が判らない時はphp -i | grep php.ini

  6. 設定の確認

    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の環境変数を変更できないっぽい)

参考リンク

開発環境