php: 2006年4月アーカイブ

最近 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 の違いってプログラム中でロードできるかどうかの違いだけなのだろうか?
教えて > エロい人

このアーカイブについて

このページには、2006年4月以降に書かれたブログ記事のうちphpカテゴリに属しているものが含まれています。

前のアーカイブはphp: 2006年2月です。

次のアーカイブはphp: 2006年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。