PHP/PDT

Last-modified: 2013-03-14 (木) 23:22:11


pleiades all in one (eclipse 3.5/3.7 + PDT + XAMPP)

インストール

  • 任意のフォルダでzipを展開。
  • 展開されたフォルダの xampp/setup-xampp.bat を実行。(エクスプローラーからダブルクリックでOK)

eclipse 3.7 ベースの pleiades all in one の PDTをアップデートする

PDT本家の説明は http://www.eclipse.org/pdt/downloads/

  • ヘルプ>新規ソフトウェアのインストールで http://download.eclipse.org/tools/pdt/updates/release を追加する。PDT Development Tools配下をすべて選択してインストール。
  • この構成だと、Type Hierarchyの機能が正常動作しない。また、しばしばエラーダイアログが表示される。対策として、DLTK 4.0をインストールする。具体的には、ヘルプ>新規ソフトウェアのインストールで http://download.eclipse.org/releases/juno を追加。動的言語ツールキット・コア・フレームワーク をインストール (Dynamic Languages Toolkit で検索するとよい)。参照: http://blog.goo.ne.jp/atlanto/e/1e1a5b605d3773f8a92025cb50b0ffdd
  • eclipseを--clean付で起動する。eclipse.exeの代わりに"eclipse.exe -clean.cmd"を実行すればよい。

起動

  • 展開されたフォルダの eclipse/eclipse.exe を実行

基本的な設定

インデントの設定

設定のPHP>コードスタイル>フォーマッター

  • タブ・ポリシー: スペース
  • インデント・サイズ: 2
  • タブ・サイズ:8
  • 折り返しされた行のデフォルト・インデント:1
    これは、インデントが1個挿入されるという意味。インデントサイズが2なので、スペース2個が挿入される。
  • 配列イニシャライザーのデフォルト・インデント:1

オブジェクトプロパティ,メソッドの 補完, コンテンツアシスト

ローカル変数については以下のような (PHPDocでない) コメントを書くと認識される

/* @var $propertyLoader PropertyLoader */
$propertyLoader = ...;

ローカルでのCLIアプリデバッグ実行

  • 実行>実行構成
  • 左の一覧で[PHP CLIアプリケーション]を選択して、左上の[新規の起動構成]アイコンをクリック。
  • 右側で以下を入力
    • 名前: 任意
    • PHPスクリプトタブ
      • Runtime PHPは、一番上の、Workspace default PHPを選択。
      • PHPファイルに実行したいファイルを指定
  • 右下の[適用]
  • 右下の[実行]

以降、[実行]-[ヒストリーの実行]の一覧に、上で登録した名前が表示されるので、それを選択して実行。
ツールバーの[実行]アイコンからも同様に実行可能。

ローカルでのWebアプリデバッグ実行

httpd.confから、ワークスペースにAliasを作成する

書き換えるファイル

C:\<pleiadesインストール先>\xampp\apache\conf

最後に以下を追加

Alias /web "C:\Users\hogehoge\Documents\foo\workspace\projname"
<Location /web>
   Order deny,allow
   Allow from all
</Location>

xamppのApacheを起動する

  • <xamppインストール先>\xampp-control.exe を実行
  • GUIからApacheをStart

これでデバッグ実行できるようになる。

xamppのApache起動時にphp_pgsql.dllやphp_pdo_pgsql.dllのロードでエラーとなる

以下の内容のダイアログが表示され、Apacheのerror.logにも記録される。

 PHP Startup: Unable to load dynamic library 'C:\~\xampp\php\ext\php_pdo_pgsql.dll'
 - 指定されたモジュールが見つかりません。

libpq.dllがPATHに見つからず、ロードできていないとこの現象が起きるらしい。

以下のどちらかで対処可能。

  • PATHにlibpq.dllの所在を追加
  • httpd.confで明示的にlibpq.dllをロード

httpd.confの最後に以下を追加したところ解決した。

 LoadFile "<xamppインストール先>/php/libpq.dll"

古いPleiades all in one PHPで作ったワークスペースを引き継いだらデバッグ実行できない

eclipse 3.5 ベース時代のものから3.7ベースへ移行したら、CLIデバッグ実行ができなくなった。
以下のようなメッセージダイアログが出る。

Error launching
The session could not be started.
In order to generate debug information,please sure that the debugger is properly configured as a php.ini directive.

デバッガのデフォルトが3.5->3.7で ZendからXDebugに変更になった?

新規にワークスペースを作成した場合の設定と、既存のを引き継いだ場合の設定とを比較して修正するとよい。
以下の設定を確認する。

  • ウィンドウ - 設定 - PHP実行可能ファイル
    実行可能ファイル C:\bin\pleiades-e3.7-php-jre_20110924\xampp\php\php.exe
    PHP ini C:\bin\pleiades-e3.7-php-jre_20110924\xampp\php\php.ini
    SAPI Type CLI
    PHP デバッガー XDebug
  • ウィンドウ - 設定 - デバッグ
    PHP デバッガー: XDebug
    サーバー: Default PHP Web Server
    PHP実行可能ファイル: PHP 5.3.1 (CLI)

上記がワークスペースのデフォルトとなるはずだが、もしかしたら、個々の起動構成設定が別の設定で上書きしているかもしれないので、確認する。

  • 実行 - 実行構成 左のツリーから目的の構成を選択 右のタブからPHPスクリプト を選択

ブレークポイントを設定しても無視される(中断しない)。→ --clean付きでeclipse再起動で解決したが、はたして・・・
eclipseを--clean付で起動するには、eclipse.exeの代わりに"eclipse.exe -clean.cmd"を実行すればよい。

リモートデバッグ実行(Debian+Apache+PHP 5.3 で動いているアプリのデバッグ実行)

本家の以下の説明を参照

上記の説明だと、eclipseを動かすマシンのIPアドレスをPHP側に設定する必要がある。
eclipse側のIPアドレスが定まらず指定ができない場合、以下の説明を参考に設定を変更する。

PHP側設定

sudo aptitude install php5-xdebug
vi /etc/php5/apache2/conf.d/xdebug.ini

以下の設定を追加

zend_extension=/usr/lib/php5/20090626/xdebug.so   ←元からあった行
xdebug.remote_enable=On
;xdebug.remote_port=9000       ←デフォルトが9000であり、そのままで良いため指定不要
;xdebug.remote_handler="dbgp"  ←デフォルトがdbgpであり、そのままで良いため指定不要
;xdebug.remote_host=<hostname> ←eclipse側のIPアドレス。これが固定にできないため・・・
xdebug.remote_connect_back=On  ←代わりにこの指定を追加

Apache再起動

sudo /etc/init.d/apache2 restart

eclipse側設定

ウィンドウ>設定

  • PHP>デバッグ
    • PHPデバッガー: XDebug
  • PHP>デバッグ>インストール済みのデバッガー
    • XDebugを選択して[構成]
      • 最大子数 (Max children): デフォルトが31だが、必要に応じて増やす。(後述)
  • 一般>Webブラウザ
    • 実行に使うブラウザを選択。Chromeを使いたかったため、[外部Webブラウザーを使用]を選択。[新規]で次のとおり設定。
      • ロケーション: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
      • パラメーター: --new-window (独立したウィンドウを開くために必要。これを付けない場合、既存のウィンドウに新しくタブを開く。)
  • PHP>PHPサーバー
    • [新規]で次の内容を追加
      • 名前は任意
      • ベースURL: PHPアプリにアクセスするためのURL。アプリのルートのURL。例としてhttp://test.example.com とする。
      • Local Web Root: 空にしておく。
      • [パスマッピング]タブ: URLと、eclipseから見えているファイルとの関連付けを指定する。http://test.example.com/foobar.php が、ワークスペース上の/projname/www/foobar.php であれば、サーバー上のパスは「/」、ローカルパスは「ワークスペースのパス」の「/projname/www」とする。

※ 変数ビューにarrayが表示される際、その要素は設定の「最大子数 (Max children)」単位で区切って表示されるようだが、区切られた2つめの固まり以降は正常な値が表示されなかった。このため、この数を超える要素の値が確認できない。objectのプロパティについても同じ状況となる。

さらに、デバッグ構成を定義する。

  • 実行>デバッグ構成で
  • PHP Webアプリケーションを選んで左上の[新規の起動構成]
    • サーバータブ
      • PHPサーバー: 上記で定義したPHPサーバを選択
      • ファイル: デバッグ実行開始時に開きたい画面の(例えばログイン画面)、eclipse側のファイルを指定する。
      • URLは、[自動生成]にチェックが入っていると誤ったURLになるため(パスマッピングしているのになぜ??)、チェックをはずして自分で指定。
      • 右下の[デバッグ]ボタンで実行開始。

実行開始すると自動的にデバッグパースペクティブが開かれる。

デバッグビューの赤い停止ボタンを押すと、デバッグを終了する。デバッグ終了時に新規にWebブラウザーが開くのはわずらわしいが異常ではない。デバッグ実行するかどうかは、Webブラウザから送信されるCookieによって制御されており、デバッグ実行を終了させるには、Cookieを無効にする必要がある。無効にするには、サーバからCookieを無効にするレスポンスを受け取る必要がある。このためこのような動作になっていると思われる。

バグ?

  • watch式に追加した式が評価不能の場合、PHPがSegmentation faultで落ちる。