from 和ジオ

Windows Eclipse から Linux PHP をリモートデバッグする (PHPEclipse + PHP/dbg)

ソフトをつくる

Windows Eclipse から Linux PHP をリモートデバッグする (PHPEclipse + PHP/dbg)

はじめに

PHPの開発で、開発用試験サーバを最終的に動作する環境に合わせたいことがよくあります。また、サーバはあまり開発ツールをいれてよごしたくないので、 便利な別の Windows クライアントからソースを編集してデバッグしたい! といった要求もあるかと思います。

ここでは、開発クライアントを Windows 、PHPが動作するアプリケーションサーバを Linux として、Windows クライアントから Linux/PHP をリモートデバッグ(ステップ実行や変数のウォッチ)する方法をメモしておきます。 

Eclipse + PHPEclipse + PHP/dbg モジュール を使って環境構築してみました。

Eclipse スクリーンショット

Eclipse + PHPEclipse のインストール

まず、Windows 側に Eclipse 3.0.2 と PHPEclipse のインストールを行います。(各ソフトウェアのバージョンは上がっていくと思うので適宜、その時点のバージョンに読み替えてください)

  1. Eclipse を動かすために JDK をインストールする
    1. Java 2 Platform Standard Edition 5.0 のダウンロード から jdk-1_5_0_03-windows-i586-p.exe をダウンロードしセットアップする
  2. Eclipse 3.0.2 のインストール
    1. Eclipse Downloads から eclipse-SDK-3.0.2-win32.zip をダウンロードし展開する
    2. Eclipse Language Pack から NLpack-eclipse-SDK-3.0.x-win32.zip をダウンロードし、1. で作成した eclipse ディレクトリに展開する。(日本語化されます)
    3. できあがった eclipse ディレクトリを C:¥Program Files¥eclipse-3.0.2 としてコピーし、ディレクトリの eclipse.exe をダブルクリックして Eclipse の起動する。
    4. ワークスペースのディレクトリを聞かれるのでとりあえず、 「C:¥Program Files¥eclipse-3.0.2¥workspace」にしておく。
    5. 「ようこそ画面」を閉じ、その後いったん Eclipse を落とします。
  3. PHPEclipse プラグインのインストール
    1. PHPEclipse.de から PHPEclipse1.1.3-2005-01-29.zip し、C:¥Program Files¥eclipse-3.0.2 ディレクトリに展開する
  4. ローカルインタープリタ用の PHP をインストール
    1. PHP: Downloads から Linux サーバにインストールしているのと同一バージョンの Windows PHP バイナリ .ZIPパッケージをダウンロードする。(ここでは、PHP 4.3.11 zip package を使いました)
    2. C:¥Program Files¥eclipse-3.0.2 に extentions というディレクトリを作成し、その中に php-4.3.11-Win32 ディレクトリをコピーする。(#この Windows にいれる PHP はローカルコードエラーチェック用です)

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 を起動しようとするのを、下記の設定で抑止しておきます。

PHPEclipse 設定

ここまでで、PHP がスクリプトモードでは動作しますので試してみます。 ファイル -> 新規 -> プロジェクトから PHP プロジェクト /  php ファイル を作成し、エラーチェック等が効いているか確認します。

Linux サーバ PHP dbg モジュールのインストール

実際に動作する、サーバ PHP にリモートデバッグモジュールである dbg を extention で追加します。 Fedora CORE Linux (2) を使っています。 他の環境の方も同様でいけると思います。 Apache / PHP はインストール済みの前提で書きます。

  1. PHP 開発ヘッダをインストール
    1. PHP dbg をコンパイルするのに php-devel が必要なため事前にインストールする
  2. PHP dbg モジュールのコンパイル
    1. DBG | PHP Debugger and Profiler. から dbg-2.11.32-src.tar.gz をダウンロード展開(Linux glibc 2.2 系の方はバイナリがあります)
    2. deferphpize を編集して、phpize のパスをあわせる
    3. deferphpize を実行して、コンパイルする
    4. make install
  3. PHP dbg モジュールを php.ini に追加する
    1. php.ini に extension としてdbg.so を追加する
    2. php.ini に [Debugger] エントリを追加し、debugger.enabled=on、debugger.profiler_enabled=on を設定する 
    3. Apache を再起動する
  4. 確認
    1. サーバ上に phpinfo(); スクリプトを設置し、ブラウザから表示。 dbg モジュールが読み込まれていることを確認する

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

PHP Eclipse に Linux/PHP リモートデバッグ設定をする

ここでは下記のような前提で説明を書いています。

  • Eclipse プロジェクトファイルは「Z:¥98.WebDevelop¥php_remotedebug¥」ディレクトリにある
  • 「Z:¥98.WebDevelop¥php_remotedebug¥」は Linux サーバの samba 共有ディレクトリである
  • 「Z:¥98.WebDevelop¥php_remotedebug¥」は Linux サーバの Apache のドキュメントである
  • Apache 的には「http://192.168.0.100/develop/php_remotedebug/」である
  • Linux 的には「/home/samba/Public/98.WebDevelop/php_remotedebug/」である
  • デバッグ対象起動スクリプトファイル名は 「remotedebug.php」である

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 "ほげほげ"」 から解放されます。:-)

このメモ作成にあたり以下のページを参考にさせて頂きました。

PHPのリモート・デバッ グについて

サー バー管理者の戯言 : PHPEclipseインストール編

ありがとうございました。