PHP5からOracleに接続(Instant Client, PDO_OCI のインストール)
Unsupported Oracle version! だの、ありとあらゆるエラーを出したのですが、
最終的に下記の手順でできましたので(泣)、手順をメモします。
各種公式マニュアルと、http://www.doyouphp.jp/php5/php5_pdo.shtmlを参考にしました。
■やりたかったこと
PHPのWebサーバ(Oracleは入っていない)から、Oracle Instant Client を使って
PDOで Oracle DB に接続したい。具体的には、PDO_OCIをインストールしたい。
■予備知識
OSにインストールするドライバ(OCI:今回はOracle Instant Client)
↑
PHP拡張モジュールのOracle用ドライバ(PDO_OCI)
↑
PDO(ドライバAPI)
という三段階の構成になっています。ドライバが無いとPDOが動けない。
# ref. http://www.php.net/manual/ja/book.pdo.php
■今回試した環境
・PHP5.2.10。
・uname -a で確認したところ、Webサーバ機のCPUは32bitだった<32or64が重要。
・Oracle Technology Network(OTN)からダウンロードしたOCI
・instantclient-basic-linux32-11.1.0.7.zip と
・instantclient-sdk-linux32-11.1.0.7.zip
をインストールした。
(↑これ、同じ階層に展開するんですね。最初、マニュアル読まずに、sdkだけ別なディレクトリに展開なんてアホなことをしてしまい、時間を無駄にしました。。。)
InstantClient は、環境変数 ORACLE_HOME が不要です。インストール時に、LD_LIBRARY_PATH だけは必要で、
$ export LD_LIBRARY_PATH=/path/to/your/instantclient/installpath/
のようにして通します。
$ env
で確認しつつ。
■今回試したやり方
PHPへの PDO_OCI の static な組み込み(DSOではない)。
■PHPの configure
「--with-pdo-oci=instantclient,$HOME/src/instantclient,11.1.0.7」
でうまくいった。PHPの./configure のマニュアルのとおり、
「リテラル(instantclient), InstantClientをインストールしたディレクトリのルートパス, バージョン番号」
という書式でオプションを指定しないとうまくいかないので注意。つまり、
./configure --help | grep oci
をよ〜く読んでから作業しないともちろんダメだよ!ということ。
[kumamidori@www292 ~/src/php-5.2.10]$ ./configure \ --prefix=$HOME \ --with-config-file-path=$HOME/www/php.ini \ --with-pear=$HOME/share/pear \ --enable-force-cgi-redirect \ --enable-mbstring=all \ --enable-mbregex \ --enable-mbstr-enc-trans \ --enable-versioning \ --enable-trans-sid \ --with-mysql \ --with-jpeg=/usr \ --with-soap=yes \ --with-zlib=/usr \ --with-gd=/usr/local \ --with-jpeg-dir=/usr \ --with-freetype-dir=/usr \ --with-ttf \ --with-png-dir=/usr \ --with-curl \ --with-pdo-oci=instantclient,$HOME/src/instantclient,11.1.0.7 \ --enable-sigchild
ちなみに、oci8も入れる場合は
--with-oci8=instantclient,$HOME/src/instantclient \
です。
■PHPのインストール
make su - make install
※試していませんが、すでにインストール済みの環境に後から組み込みたい、という場合は、
phpize
を使って
--with-pdo-oci
の指定だけ同様してやれば入るのではないでしょうか。
phpinfo でドライバ「pdo_oci」の文字が出るようになったのを確認。
■PDO_OCIのインストール
pecl install pdo_oci
これでつなげるようになりました。