PHP7でPDO_IBM拡張を利用しようとしてハマった
こんにちは、ナカエです。
最近DB2を使ったPHP7の案件があり、PDO_IBM拡張をインストールしようとして一筋縄ではいかなかったので覚書です。
pecl installコマンドは何故かPECL専用のPDO拡張を要求してくる(単純にPDO拡張が入っていてもダメらしい?)ので手動でビルドすることにしました。
最近DB2を使ったPHP7の案件があり、PDO_IBM拡張をインストールしようとして一筋縄ではいかなかったので覚書です。
pecl installコマンドは何故かPECL専用のPDO拡張を要求してくる(単純にPDO拡張が入っていてもダメらしい?)ので手動でビルドすることにしました。
ビルド手順
pecl download pdo_ibm-1.3.5
tar zxvf PDO_IBM-1.3.5.tgz
cd PDO_IBM-1.3.5/
phpize --clean
phpize
# 環境に応じてDB2のsqllibのディレクトリを指定
./configure --with-pdo-ibm={DB2_HOME}
make
sudo make install
そのままのソースでビルドして拡張を有効化すると読み込み時にエラーが出たため、ver.1.3.5のibm_driver.cをパッチします。
パッチ箇所
PHP7からPHP拡張用のAPIの定数名が変わっており、そこで処理が落ちていました。
1.3.4のリリースにはPHP7対応とあったので、修正漏れでしょうか。
※ リポジトリのソースがバージョンが古いですがこの辺りです。
https://github.com/php/pecl-database-pdo_ibm/blob/master/ibm_driver.c#L984
+ #if PHP_MAJOR_VERSION >= 7
+ option_str = Z_STRVAL_P(data);
+ #else
option_str = Z_STRVAL_PP(data);
+ #endif
この部分を修正してビルドすると、拡張読み込み時のエラーがなくなります。