Windowsでも利用していたXdebugをLeopardでも使おうと思ってインストールしようとしたところ、ここ数日のハマリ癖のせいか、またまたはまってしまいました・・・。
以前書きましたが、僕のMacBookProでは、ApacheとPHPはLeopardにデフォルトで入っているものを、MySQLはMacportを利用してインストールしました。
そんな環境にXdebugを入れようと思いコマンドラインから、
pecl install -a xdebug
と、やってみたところ、普通に「xdebug.so」が生成されて以下のディレクトリにインストールされていました
/usr/lib/php/extensions/no-debug-non-zts-20060613
そこで、php.iniに以下の3行を追加
extension=xdebug.so
xdebug.profiler_enable=1
xdebug.profiler_output_dir = "/var/log/xdebug"
そのあと、Apacheを再起動して、phpinfoで確認してみるけどxdebugがロードされていない。色々とググって「extension=」を「zend_extension=」としてみたり 、フルパスで指定してみたり試してみたけど、Apacheは起動するのに、xdebugのライブラリはどうにもロードされない(一旦xdebugをあきらめて、ZendDebuggerを入れようとしてみたけど、同様にロードされず)
あんまり気が進まないけど、どうもLeopardデフォルトのPHPがいまいちっぽいので Makeすることにしてみました(デフォルトのPHPは5.2.4。今日現在、最新の安定版は5.2.5なので、これをダウンロード)
色々とconfigが面倒なので、「Mac OS X LeopardでPHP開発環境を整える」を参考に自分の環境に合わせて:
./configure
--prefix=/usr/local/php5
--program-suffix=
--infodir=/usr/local/share/info
--mandir=/usr/local/share/man
--with-config-file-path=/usr/local/lib/php5
--with-config-file-scan-dir=/usr/local/lib/php.d
--with-pear=/usr/local/lib/php5/pear
--sysconfdir=/usr/local/lib/php5/etc
--with-apxs2=/usr/sbin/apxs **
--with-zlib-dir=/opt
--enable-sockets
--enable-exif
--with-mysqli=/opt/local/lib/mysql5/bin/mysql_config
--with-mysql=/usr/local/mysql5 **
--with-xml
--enable-mbstring
--with-libmbfl
--enable-wddx
--enable-zend-multibyte
--enable-discard-path
--enable-cgi
--enable-track-vars
--enable-force-cgi-redirect
--with-gd=/opt/local
--with-jpeg-dir=/opt/local
--with-png-dir=/opt/local
--with-freetype-dir=/opt/local
--with-pdo-mysql=/opt/local/lib/mysql5
(変更したのは、**のところ)
もちろん、案の定エラーでまくり。結果的これらのエラーを一つ一つ解決しようとしてはまったわけですが・・・。
まずは、なんだか色んなライブラリが入ってないみたいなので、上のサイトを参考にしながらMacportsを使って、適当にライブラリを入れてみました(jpegとかgd2とか)。
(自分用メモ:「–with-mysql=」ではmysqlのベースディレクトリを指定する必要があって、そのディレクトリの下には「include/」と「lib/」が必要なんだけど、そんな構成のディレクトリが見つからなかったので、作る必要がありました。なぜか、以前macportでインストールしたmysql5は、「/opt/local/」の下の、「include/mysql5/mysql」と「lib/mysql5/mysql」に散らばっていたので、「/usr/local/」の下にmysql5を作って、そこにそれぞれへのディレクトリへのリンクを張る形でベースディレクトリを作ってみました。「bin」もついでに作りました。)
あと、iconvまわりでもエラーがでるので、それについては「Leopard に PHP をインストール」の
ext/iconv/iconv.c の iconv_open と iconv_close を libiconv_open と libiconv_close に書き換える。
を参考にしました。
これでようやくPHPのmake&installが完了したので、Apacheを再起動しようとしたら、今度は新しく作ったlibphp.so がロードできないと言って、Apacheが起動してくれない・・・。
頭に来たので、Apacheもデフォルトのものを捨ててインストールしようと思って、再度Macports。
が、しかし、エラー、エラー、エラー!まったく意味が分からないエラー が発生。
ググったところ、同じ問題に直面したかたのブログを発見→「MacPortsのApache2.2.8」。ここを参考にして、
/opt/local/var/macports/build/_opt_local_(中略)_www_php5/work/build/config_vars.mk
を修正して、再度 Macports(port install apache2)したところ、なんとかインストール完了。
これまでのApacheをkillして、新しいApacheをstartしたところ、よ・う・や・く、xdebugがロードされてた!
ただ、xdebugだけだとプロファイルログが全然読めないので、Windowsで使っていたWinCacheGrindの大元のKCacheGrindを今日散々お世話になったMacportsでインストール(port install kcachegrind)したところ、なんだか関連するライブラリのインストールが始まり、それが延々と続き、1時間以上かかってようやく完了。
xdebug入れるためだけに、環境全て再構築してしまいました ・・・。
ただ、やっぱりxdebugでプロファイル見たおかげで、濡れ雑巾絞るように非効率な部分のチューニングはできました。
PHP 開発日誌