Mac で Eclipse PDT (Helios) と XAMPP で PHP の Debug

PHPのdebuggerは敷居が高い(気がする). しかし最近,
Eclipse PDT (Galileo)での開発について, XAMPP on Windows (1.7.2)を想定して書かれた, かなりよい本が出ている.

Eclipse PDTではじめるPHPプログラミング入門―PHP 5.3/PDT 2.1対応

* 作者: 掌田津耶乃
* 出版社/メーカー: 秀和システム
* 発売日: 2009/12

ここに書くのは, Mac (Snow Leopard) のXAMPP(1.7.2)と Eclipse PDT (Helios) で PHP の debug をする話. 網羅的でなく, hig3 が詰まったところ中心だけど許してね.

XAMPP は /Applications/XAMPP 以下に install したとしよう.

XDebug を使えるようにする

Eclipse PDT では Zend Debugger と XDebug が使えるが, 本と同様に XDebug を使う. XDebug は XAMPP についてくるので, PECL などで別に install することは必須ではない.

/Applications/XAMPP/xamppfiles/etc/php.ini に

[xdebug]
zend_extension="/Applications/XAMPP/xamppfiles/lib/php/php-5.3.0/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=On

と書く. そのあと Apache を restart.

  • zend_extension_ts ではない. この xdebug は non thread free だから.
  • zend_extension(_ts)_debug ではない. この xdebug は no-debug だから. これは xdebug に自身のdebug情報が埋め込まれてるかどうか, って話ではないか.
  • extension=xdebug.so だけではだめ. 後述のように error がでる.
  • remote_enable することは必要. そうしないと, PHP Scriptとしての debug はできても, PHP Web Page としての, Web server / browser の通信を伴う debug はできない.
ここまでうまくいった(いかなかった)ことの確認1

/Applications/XAMPP/xamppfiles/htdocs 以下に, phpinfo(); を含む PHP Web Pageを作り, Web browser で確認する. XDebug の section ができているはず. extension= と書いているときには, "このxdebugはZend Extension として load しなきゃやだ" という error message がでてしまうはず. そして実際, そのときには xdebug は使えない.

ここまでうまくいった(いかなかった)ことの確認2

/Applications/XAMPP/xamppfiles/logs/error_log に xdebug のインストール関係の error message を書いてくれることがある.

PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0

と phpinfo() と同じことを言われたり, full path を書き間違えたときに image が見つからないと言われたり.

Eclipse から使う

Debug Configuration を作る. その際, もちろんXDebugを指定する.
PHP Script の場合は PHP Executable を指定, PHP Web Page の場合は PHP Server を指定.

PHP Web Page の Server Tab では,

  • File というところには, Project Explorer から見えるような, /(プロジェクト名)/.../(ファイル名) を書く. 実体のファイル名ではない.
  • URL というところでは, プロジェクト名とは無関係の, ふつうのURLを書く.

このとき, 実体のないファイルを指定すると, ダイアログ上部に小さく error message が出て. Debug button が gray out する. このときに close すると, 保存はされるが, この状態では debug はできない.