php5.4でphp-test_helpersを入れてみる


php-test_helpersなるものをいれなくては行けないことになった
[[PHP][PECL]test_helpers拡張モジュール](http://d.hatena.ne.jp/shimooka/20101206/1291622471)からの引用ですと

>コンセプトとしては、ユニットテストを書けないようなレガシーコードで、ユニットテストを楽に書けるようにするための拡張モジュールのようで、ざっと機能をまとめてみると、
>
>*exit/die関数の無効化やコールバックを指定できる
>*newオペレータの実行時にコールバックを指定できる
>*関数の改名

ができるらしい。
が、phpenvで入れたPHP5.4.11で入れようとしたらエラーになったのでその時のメモです


## 環境

* centos6.3（ゲストOS）
* macosx10.8(ホストOS)

## 事前準備に必要なもの
* php5.4以上
* git

## 参考にしたサイト
* [sebastianbergmann / php-test-helpers](https://github.com/sebastianbergmann/php-test-helpers)
* [[PHP][PECL]test_helpers拡張モジュール](http://d.hatena.ne.jp/shimooka/20101206/1291622471)


## gitから最新を落としてこないとエラーになりますよ！！

peclのtgzから落とすとmakeでこのエラーに悩まされた

```shell
$make


/bin/sh /tmp/test_helpers-1.0.0/libtool --mode=compile cc  -I. -I/tmp/test_helpers-1.0.0 -DPHP_ATOM_INC -I/tmp/test_helpers-1.0.0/include -I/tmp/test_helpers-1.0.0/main -I/tmp/test_helpers-1.0.0 -I/root/.phpenv/versions/5.4.11/include/php -I/root/.phpenv/versions/5.4.11/include/php/main -I/root/.phpenv/versions/5.4.11/include/php/TSRM -I/root/.phpenv/versions/5.4.11/include/php/Zend -I/root/.phpenv/versions/5.4.11/include/php/ext -I/root/.phpenv/versions/5.4.11/include/php/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /tmp/test_helpers-1.0.0/test_helpers.c -o test_helpers.lo 
mkdir .libs
 cc -I. -I/tmp/test_helpers-1.0.0 -DPHP_ATOM_INC -I/tmp/test_helpers-1.0.0/include -I/tmp/test_helpers-1.0.0/main -I/tmp/test_helpers-1.0.0 -I/root/.phpenv/versions/5.4.11/include/php -I/root/.phpenv/versions/5.4.11/include/php/main -I/root/.phpenv/versions/5.4.11/include/php/TSRM -I/root/.phpenv/versions/5.4.11/include/php/Zend -I/root/.phpenv/versions/5.4.11/include/php/ext -I/root/.phpenv/versions/5.4.11/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/test_helpers-1.0.0/test_helpers.c  -fPIC -DPIC -o .libs/test_helpers.o
/tmp/test_helpers-1.0.0/test_helpers.c: In function ‘new_handler’:
/tmp/test_helpers-1.0.0/test_helpers.c:87: error: ‘znode_op’ has no member named ‘u’
```

Cは読めないって。。。。

## ググること２時間

gitがあることに気づく！！


## インストール


```shell
cd /tmp
git clone https://github.com/sebastianbergmann/php-test-helpers.git
cd php-test-helpers
phpize
./configure
make
make test
make install 
```

## 設定

注意が必要でzend_extensionがロードしているPHPの場合はそれより下にモジュールのロードをしないとエラーになるそうです。公式に書いてましたが気づかずに２０分ほどハマりました。

```php:/root/.phpenv/versions/5.4.11/etc/conf.d/xdebug.ini
 zend_extension="/root/.phpenv/versions/5.4.11/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
 html_errors=on
# 下記を追加
 zend_extension=/root/.phpenv/versions/5.4.11/lib/php/extensions/no-debug-non-zts-20100525/test_helpers.so
~
```

PATHなどは適時自分の環境に置き換えてください。自分はphpenvでいれたディレクトリが
/root/.phpenv/versions/5.4.11/lib/php/extensions/no-debug-non-zts-20100525/だったのでそこに入れてます。phpの拡張モジュールのファイル先を指定すれば大丈夫です。

またxdebug.iniを編集していますがxdebugを入れてなければ新規で作成しても多分問題ないと思います。

## nginx or apacheの再起動

webサーバーを再起動しましょう

## php-fpmの再起動

php-fpmを使っているならば再起動しましょう


## 動作確認

実際に使ってみる

```php:test_helper.php
<?php
set_exit_overload(function() { return FALSE; });
exit;
print 'We did not exit.';
unset_exit_overload();
exit;
print 'We exited and this will not be printed.';
```

exitをかけているがスルーしてWe did not exit.が表示されればOKです。

test_helpersがgitに移行されていてpeclとかは既に古くなってるのでご注意ください。これだいぶハマりました。。。。。