XAMPPでoci8を設定する

<環境>

  • Windows10 Home x64
  • XAMPP7.2.10 (PHP7.2.10、Apache2.4.34)
  • Oracle12cR2(XAMPPと同じPC内にインストール)

<やったこと>

  1. 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を追記。
  2. php.iniの設定
    C:\xampp\php\php.iniをエディタで開いてextension=oci8_12cとextension=pdo_ociのところの;を取り除いて有効に。
  3. 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を実行してみても問題なく動いています。