Zend extension を extension_dir からロードできるようにしてみた
最近 PHP の拡張である xdebug をインストールしてみた。
使ってみると、なかなか便利。プロファイリングとかとれて、どこが処理のボトルネックになってるかよく分かります。
なんかエラーメッセージとかも分かりやすくなってるし。これはイイ!!
xdebug をインストールしてみて気づいたのですが、xdebug は普通の extension ではなく、zend extension なんですね。
この extension と zend extension の違いはよく分かってないのですが、なぜか zend extension の場合は extension_dir の指定が効かない!!
zend extension をロードするときだけ、絶対パスで指定しないといけないのです。
(相対パスでもいいんだろうけど extension_dir のように基準ディレクトリを指定できない)
どうにもこうにも納得がいかないので、いろいろいじってみてパッチを作ってみました。
zend extension をロードする関数に渡ってきた文字列が絶対パスでない場合は、extension_dir を先頭に付加してやるという単純なパッチです。
cd php-x.y.zpatch -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 の違いってプログラム中でロードできるかどうかの違いだけなのだろうか?
教えて > エロい人