先日MacPortsで管理しているPHPのバージョンアップを行ったのですが以下のような現象に悩まされました。
$ php -r "print_r('hoge');" Fatal error: Call to undefined function print_r() in Command line code on line 1
エラーが発生するのはコマンドラインからの利用のみで、なぜかWeb経由では問題なく動きます。
調べて見ると全ての関数が使えない。。
ビルド時のconfigureで以下のエラーが表示されCLI版のバイナリ作成に失敗していました。
Generating files updating cache ./config.cache creating ./config.status creating php5.spec creating main/build-defs.h creating scripts/phpize creating scripts/man1/phpize.1 creating scripts/php-config creating scripts/man1/php-config.1 creating sapi/cli/php.1 creating main/php_config.h creating main/internal_functions.c gawk(96091,0x7fff70a28c20) malloc: *** error for object 0x100214910: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug creating main/internal_functions_cli.c gawk(96132,0x7fff70a28c20) malloc: *** error for object 0x100215aa0: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
対処法は以下のページを参考にして
MacPortsのphp52(@5.2.13_1)で"Call to undefined function in_array()"と出て+pearが入らない件への対処方法(超アドホック) – 富士山は世界遺産
#25231 (php52-5.2.13 error compiling php52 with +pear variant on Snow Leopard Server) – MacPorts
portでconfigureした後、手動でビルド、portでインストールという手順をとりました。
$ sudo port confiure php52 @5.2.14_0+apache2+mysql5+pcntl+postgresql83+sqlite $ pushd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_php52/work/php-5.2.14 $ sudo `cat config.status | head -7 | tail -1 | sed 's/^#//'` $ popd $ sudo port install php52 @5.2.14_0+apache2+mysql5+pcntl+postgresql83+sqlite
なお、macportsのtracには、gawkをアップデートしてからビルドするような手法が書かれていますが当方環境ではダメでした。