XAMPPでoci8を設定する
<環境>
- Windows10 Home x64
- XAMPP7.2.10 (PHP7.2.10、Apache2.4.34)
- Oracle12cR2(XAMPPと同じPC内にインストール)
<やったこと>
- Oracle Instant Clientのインストール
https://www.oracle.com/technetwork/jp/topics/index-099943-ja.html
ここからWindowsの32bit版(12.1.0.2.0)をダウンロードして解凍後、C:\instantclient_12_1に設置。
環境変数の設定ウインドウからPATHにC:\instantclient_12_1を追記。 - php.iniの設定
C:\xampp\php\php.iniをエディタで開いてextension=oci8_12cとextension=pdo_ociのところの;を取り除いて有効に。 - Apacheの再起動
これでphpinfo()を実行すればoci8が表示されるはずでしたが見当たりません。
Apacheのエラーログを確認すると
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8_12c'
という警告が表示されているではないですか。。
extension_dirに該当ファイルはあるし、環境変数まわりも問題なく設定されているし、Oracle Instant Clientもちゃんと32ビット版だし、何がいけないのか全然わかりません。。
もうとにかくググるしかないのでキーワードを変えまくって調べて試すを繰り返していると、それらしき解決法を発見!試してみたらようやく動いてくれました。
答えはXAMPPのコントロールパネルの起動時に環境変数を設定してやること。
下記のような内容のバッチファイルを作って、そこからコントロールパネルを起動した後、Apacheを起動してやると無事oci8が動くようになりました。
SET PATH=C:\instantclient_12_1;C:\xampp\php; C:\xampp\xampp-control.exe exit
PHP7で利用したいものと違うバージョンのOCI8用dllがロードされてしまう可能性があるため、バッチファイルでパスを指定する必要があるのだそうです。
なので環境変数の設定ウインドウからPATHにC:\instantclient_12_1を追記したものを削除しても問題ありませんでした。
ちなみに気が付かれた方もいらっしゃるかもしれませんが、Instant Clientのバージョンは12.2.0.1.0ではなく12.1.0.2.0だとうまくいきました。12.2.0.1.0だと動かないのでご注意ください。
Oracleが12cR2なので本来は12.2.0.1.0をインストールするのが正しいと思うのですが、動かないので12.1.0.2.0を試してみたらとりあえず動いたといった感じです。簡単なSQLを実行してみても問題なく動いています。