PHPのこの関数が、あともうちょっとこんな挙動をしてくれたらなぁ。。。
デバッグのために、一時的にここだけ動作を変更させたいんだけどなぁ。。。
そんな風に思うこと、ありませんか?

 今回は、そんなかゆい所に手が届く一風変わったPHPエクステンション、「runkit」をご紹介します。

 runkitは、PHPの定数や関数、クラス、メソッドを追加・変更・削除したり、独自のスーパーグローバル変数を定義したりできるPHPのエクステンションです。

 基本的な関数などの追加・変更機能はPHP4と5の全てのバージョンで使用することができ、独自のスーパーグローバル変数定義はPHP4.2以上で使用可能となります。

 加えて、PHP5以上では、「サンドボックス」という独自のPHP実行空間を持つスレッドを生成する機能も利用することができます。

 このライブラリはPECL拡張モジュールとして提供されています。以下のようにpeclコマンド(もしくはpearコマンド)を使用しすることでインストールすることができます。runkitは現在まだベータ版なので、モジュール名の指定には「-beta」表記をつけてください。

# pecl install runkit-beta

 また、PHP5.2以上を利用している場合は現在リリース版として配布されているソース(執筆時点のバージョンは0.9)ではmake時にエラーが発生してしまうため、上記の方法ではインストールできません。

 そのため、ソースをダウンロードした後、エラーの原因となるソースコードの修正を行ってからマニュアルでインストールをする必要があります。

$ wget http://pecl.php.net/get/runkit-0.9.tgz
$ tar xvzf
$ cd runkit-0.9

 runkit_import.c 内で使用されているzend_unmangle_property_name()関数(バージョン0.9では230行目にあります)の引数を

zend_unmangle_property_name(key, &cname, &pname);

から

zend_unmangle_property_name(key, key_len, &cname, &pname);

に変更した上で、インストール作業を行ってください。

$ phpize
$ ./configure --enable-runkit --enable-maintainer-zts
$ make
$ sudo make install

 あとは、extension=runkit.soの記述をphp.iniに追記してください。

※なお、この問題は既にCVSリポジトリ上のソースでは修正されているので、そちらをチェックアウトしてきて使用すれば修正の必要はありません。