php5.4でphp-test_helpersを入れてみる
php-test_helpersなるものをいれなくては行けないことになった
[PHP][PECL]test_helpers拡張モジュールからの引用ですと
コンセプトとしては、ユニットテストを書けないようなレガシーコードで、ユニットテストを楽に書けるようにするための拡張モジュールのようで、ざっと機能をまとめてみると、
*exit/die関数の無効化やコールバックを指定できる
*newオペレータの実行時にコールバックを指定できる
*関数の改名
ができるらしい。
が、phpenvで入れたPHP5.4.11で入れようとしたらエラーになったのでその時のメモです
環境
- centos6.3(ゲストOS)
- macosx10.8(ホストOS)
事前準備に必要なもの
- php5.4以上
- git
参考にしたサイト
gitから最新を落としてこないとエラーになりますよ!!
peclのtgzから落とすとmakeでこのエラーに悩まされた
$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は読めないって。。。。
ググること2時間
gitがあることに気づく!!
インストール
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の場合はそれより下にモジュールのロードをしないとエラーになるそうです。公式に書いてましたが気づかずに20分ほどハマりました。
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
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とかは既に古くなってるのでご注意ください。これだいぶハマりました。。。。。
Discussion