PHPの開発で、開発用試験サーバを最終的に動作する環境に合わせたいことがよくあります。また、サーバはあまり開発ツールをいれてよごしたくないので、 便利な別の Windows クライアントからソースを編集してデバッグしたい! といった要求もあるかと思います。
ここでは、開発クライアントを Windows 、PHPが動作するアプリケーションサーバを Linux として、Windows クライアントから Linux/PHP をリモートデバッグ(ステップ実行や変数のウォッチ)する方法をメモしておきます。
Eclipse + PHPEclipse + PHP/dbg モジュール を使って環境構築してみました。
まず、Windows 側に Eclipse 3.0.2 と PHPEclipse のインストールを行います。(各ソフトウェアのバージョンは上がっていくと思うので適宜、その時点のバージョンに読み替えてください)
Eclipse + PHPEclipse のインストールが終わったので、Eclipse と PHPEclipse の設定をします。
C:¥Program Files¥eclipse-3.0.2¥eclise.exe をダブルクリックし、Eclipse を起動してください。
ウインドウ -> パースペクティブ -> その他 から PHP を選択して、画面を PHP モードに切り替えます。 ウインドウ -> ビューの表示 -> 問題 を選択して、コードエラー表示も有効にします。
次に、PHPEclipse の設定をします。 ウインドウ -> 設定 から PHPEclipse Web Development 以下のツリーに注目します。
・ PHP -> PHP External Parser Command の設定を変更
C:¥Program Files¥eclipse-3.0.2¥extentions¥php-4.3.11-Win32¥php.exe -l -f {0}
Eclipse のインターナルブラウザが編集中の PHP を起動しようとするのを、下記の設定で抑止しておきます。
ここまでで、PHP がスクリプトモードでは動作しますので試してみます。 ファイル -> 新規 -> プロジェクトから PHP プロジェクト / php ファイル を作成し、エラーチェック等が効いているか確認します。
実際に動作する、サーバ PHP にリモートデバッグモジュールである dbg を extention で追加します。 Fedora CORE Linux (2) を使っています。 他の環境の方も同様でいけると思います。 Apache / PHP はインストール済みの前提で書きます。
Fedora CORE (2) で行ったログを記載しておきます。
$ yum install php-devel
[install: php-devel 4.3.10-2.4.i386]
Is this ok [y/N]: y
Installed: php-devel 4.3.10-2.4.i386
$ tar zxvf dbg-2.11.32-src.tar.gz
$ cd dbg-2.11.32
$ which phpize
/usr/bin/phpize
$ vi deferphpize
> phpize=${phpize:-"/usr/bin/phpize"}
$ ./deferphpize
Build complete.
# make install
Installing shared extensions: /usr/lib/php4/
# ls -laF /usr/lib/php4/
合計 1920
drwxr-xr-x 2 root root 4096 5月 12 08:49 ./
drwxr-xr-x 87 root root 69632 5月 12 08:45 ../
-rwxr-xr-x 1 root root 76239 5月 12 08:49 dbg.so*
-rwxr-xr-x 1 root root 39452 12月 22 00:31 ldap.so*
-rwxr-xr-x 1 root root 1571588 12月 22 00:31 mbstring.so*
-rwxr-xr-x 1 root root 44364 12月 22 00:31 mysql.so*
-rwxr-xr-x 1 root root 56620 12月 22 00:31 odbc.so*
-rwxr-xr-x 1 root root 77452 12月 22 00:31 pgsql.so*
# diff /etc/php.ini.org /etc/php.ini
544a545
> extension=dbg.so
1068a1070,1073
>
> [Debugger]
> debugger.enabled=on
> debugger.profiler_enabled=on
# /etc/init.d/httpd restart
httpdを停止中: [ OK ]
httpd を起動中: [ OK ]
(http://192.168.0.100/php_utylitys/phpinfo.php)
DBG php debugger, version 2.11.32, Copyright 2001, 2005, Dmitri Dmitrienko, www.nusphere.com
debugger.enable_session_cookie On On
debugger.enabled On On
debugger.fail_silently On On
debugger.ignore_nops Off Off
debugger.JIT_enabled Off Off
debugger.JIT_host clienthost clienthost
debugger.JIT_level 3 3
debugger.JIT_port 7869 7869
debugger.profiler_enabled On On
debugger.session_nocache On On
debugger.timeout_seconds 300 300
ここでは下記のような前提で説明を書いています。
Windows から samba 経由で Linux 上のソースファイルを編集し、Linux/Apache 経由で PHP 実行という流れです。
Eclipse の ウインドウ -> ビューの表示 から「デバッグ」と「変数」のビューをだしておきます。
実行 -> デバッグから、PHPEclpse のデバッグ設定を下記のようにします。 まず、プロジェクトの設定です。 起動スクリプトを設定します。
Windows ローカルPHP 実行時のワークディレクトリです。(特に使わないかもしれませんが一応設定します)
この画面でサーバファイルと Eclipse が認識しているファイルの対応を行います。(デバッグ時Eclipse に FileNotFound.Expression が表示される場合はここを疑います) ディレクトリだけ設定すれば良いようです。 また、Remote Debug にチェックを入れます。
ローカル PHP の設定です。 サーバサイドで動かすので必要ないのですが、しないと怒られるのでしておきます。
C:¥Program Files¥eclipse-3.0.2¥extentions¥php-4.3.11-Win32
以上でデバッグ設定が完了です。
では、いよいよリモートデバッグしてみましょう。
ソースにブレイクポイントを設定します。 どうも、Eclipse 操作でつけるブレイクポイントは効いてくれないようなので、プログラムのソース中で止めたいところに
debugbreak();
をいれておきます。
できたら、先ほど設定した、Eclipse のデバッグを起動します。 Eclipse のデバッグビューに次の表示がでます。
これで、Eclipse がデバッグ待機状態にはいっています。 上の localhost の後ろが待機ポート名です。(初期起動は ポート 10001 です)
この状態で、Internet Explorer 等ブラウザから
http://192.168.0.100/develop/php_remotedebug/remotedebug.php?DBGSESSID=1@clienthost:待機ポート.
にアクセスします。 起動スクリプトのうしろに、
?DBGSESSID=1@clienthost:待機ポート
をつけるわけですね。
Windows Eclipse の待機ポートに Linux PHP dbg が無事接続できると、Eclipse がデバッグモードになります。 この後は通常の Eclipse 操作で、[F5] のステップ実行や変数のウォッチできます。
どでしょう。 これでリモート環境でも、「echo "ほげほげ"」 から解放されます。:-)
このメモ作成にあたり以下のページを参考にさせて頂きました。
サー バー管理者の戯言 : PHPEclipseインストール編
ありがとうございました。