開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. PHP7でPDO_IBM拡張を利用しようとしてハマった
no-image

PHP7でPDO_IBM拡張を利用しようとしてハマった

こんにちは、ナカエです。

最近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
この部分を修正してビルドすると、拡張読み込み時のエラーがなくなります。

 

参考

  • posted by admin_nextat
TOPに戻る