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

これでつなげるようになりました。