btoメモ

なんか適当に書く

Zend extension を extension_dir からロードできるようにしてみた

最近 PHP の拡張である xdebug をインストールしてみた。

使ってみると、なかなか便利。プロファイリングとかとれて、どこが処理のボトルネックになってるかよく分かります。

なんかエラーメッセージとかも分かりやすくなってるし。これはイイ!!

xdebug をインストールしてみて気づいたのですが、xdebug は普通の extension ではなく、zend extension なんですね。

この extension と zend extension の違いはよく分かってないのですが、なぜか zend extension の場合は extension_dir の指定が効かない!!

zend extension をロードするときだけ、絶対パスで指定しないといけないのです。

(相対パスでもいいんだろうけど extension_dir のように基準ディレクトリを指定できない)

どうにもこうにも納得がいかないので、いろいろいじってみてパッチを作ってみました。

zend_extension_dir.patch

zend extension をロードする関数に渡ってきた文字列が絶対パスでない場合は、extension_dir を先頭に付加してやるという単純なパッチです。

cd php-x.y.z

patch -p0 < zend_extension_dir.patch

でパッチを当てることができます。

このパッチを当てて、php.ini に

zend_extension=xdebug.so

って書いたら、バッチリ extension_dir にある xdebug.so を読み込んでくれました。

やったね!!

PHP 4.3.11, 4.4.2, 5.1.2 で動作確認済みです。

これで本当に大丈夫なのかよく分からないんだけど。教えて > エロい人

zend extension と extension の違いなんですけど、ソースコード読む限りは zend extension は初期化時にだけロードされて、extension の方はソースコードからでも(もちろん初期化時も)ロードできるようになってるみたい。

zend extension と extension の違いってプログラム中でロードできるかどうかの違いだけなのだろうか?

教えて > エロい人