eclipseでPHPの開発環境を構築する。デバッグ(Xdebug)でブレークポイントを付けてステップ実行できるようにする

# eclipseでPHPの開発環境を構築する

eclipseを使ってPHP開発を行う為の設定をしていきます
ブレークポイントを付けてソース上の好きなところで一時停止してデバッグできるようにします
PHPerでeclipseを使っている人は少数かと思いますが、参考までに

## 必要なものをダウンロードする
まずは必要なものをダウンロードしましょう
### Javaのインストール
eclipseはJava上で動きます
下記からJavaをダウンロードします
[https://jdk.java.net/archive](https://jdk.java.net/archive/)
解凍します
環境変数作成
名前：JAVA_HOME　値：解凍してできたフォルダのパス
環境変数修正
名前：PATH　値：解凍してできたフォルダ内のbinフォルダを追記
これでJavaのインストールは完了です
### xamppのインストール
下記からxamppをダウンロードします
[https://sourceforge.net/projects/xampp/files/](https://sourceforge.net/projects/xampp/files/)
インストールします
### eclipseのインストール
下記からeclipseをダウンロードします
[http://mergedoc.osdn.jp/](http://mergedoc.osdn.jp/)
解凍します
Windowsの場合[7-Zip https://sevenzip.osdn.jp/](https://sevenzip.osdn.jp/)を使って解凍します。そうしないと、パス長制限によりフォルダ名、ファイル名が正しく解凍されません

## 設定をする
### eclipseの設定
Java、xampp、eclipseをインストールしたら設定を行っていきましょう
eclipseを起動します
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/4f272912-549f-bde8-5432-7598108f958a.png)


1. メニューバーのウインドウ→設定をクリック
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/16ed5da9-e8da-fc3d-4df3-0ee0ea350235.png)

2. Webブラウザーをクリック→好きなブラウザを選択→適用
![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/cdc8b5f6-3f92-3d7b-ebb0-789d9131634e.png)

3. インストール済みのPHPをクリック→追加をクリック
![c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/0572d14a-da66-123f-5fef-bacea90e7893.png)

4. 参照からxampp内のphpを選択して次へを押下
![d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/09f60c04-bf4f-85ee-8ba7-eee960d2d3c7.png)

5. デバッガーにXdebugを選択し完了を押下
nginx、php-fpmを使っている人はphp-fpmのポートを9000でない値にするか、デバッガーのポートを9000でない値にするかどちらかにしてください。ポートはSELinuxで許可されているポートにしてください
![e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/f02a4769-aecb-af1d-f29c-ef460e2065f6.png)

6. サーバーをクリック→Default PHP Serverをクリック→編集をクリック
![f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/10f68dc3-cc04-915f-d75c-5c43df71f2da.png)

7. webサーバーのポートフォワードを80でない値にしていたり、ホスト名を変えていたりする場合、ベースURLを変更してください→デバッガータブを押下
![g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/77369a28-69a0-5652-20a6-a58198607913.png)

8. デバッガータブでXdebug選択→完了
nginx、php-fpmを使っている人はphp-fpmのポートを9000でない値にするか、デバッガーのポートを9000でない値にするかどちらかにしてください。ポートはSELinuxで許可されているポートにしてください
![h.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/a56069f9-b8f5-8b57-1f28-6d8cdd62b410.png)

9. デバッグ→最初の行でブレーク外す→適用
![i.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/b87fc1f4-ae19-000a-f10d-58c3a5b74521.png)

10. デバッガーを選択→Xdebugを選択→構成をクリック
![j.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/bdfe4752-b7c3-c43b-1832-f84f5635b5ed.png)

11. リモートセッションの受信でプロンプトを選択
nginx、php-fpmを使っている人はphp-fpmのポートを9000でない値にするか、デバッグポートを9000でない値にするかどちらかにしてください。ポートはSELinuxで許可されているポートにしてください
![k.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/6829700c-e80b-1ec4-303e-e19010d47716.png)

12. 適用して閉じるをクリック
![l.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/bdce1403-4c4f-e5e4-08a9-a1e9fc568dd1.png)

### php.iniの設定
デバッグできるようにphp.iniを修正しましょう
`nginx、php-fpmを使っている人はphp-fpmのポートを9000でない値にするか、xdebug.remote_portのポートを9000でない値にするかどちらかにしてください。ポートはSELinuxで許可されているポートにしてください`
xdebugのバージョンが合わない場合、下記から適切なものを落としてきましょう
[https://xdebug.org/download.php](https://xdebug.org/download.php)

#### windowsの場合
同一windows上でeclipseとphpを動作させている想定です
php.iniに下記を追記

##### XDebug2系の場合
[XDebug]
;php_xdebug.dllのパスはxamppをインストールしたフォルダによって変えてください
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_mode = "req"
xdebug.remote_port = 9000
xdebug.remote_autostart = 1
;xamppをインストールしたフォルダによって変えてください
xdebug.trace_output_dir = "C:\\xampp\tmp"

##### XDebug3系の場合
[XDebug]
;php_xdebug.dllのパスはxamppをインストールしたフォルダによって変えてください
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.discover_client_host = false 
xdebug.client_host = localhost
xdebug.client_port = 9000
xdebug.mode = debug
xdebug.start_with_request = yes
;xamppをインストールしたフォルダによって変えてください
xdebug.trace_output_dir = "C:\\xampp\tmp"

#### vagrant、docker tool box、vagrant上にdockerをインストールしている場合
ホストOSでeclipseを動かしゲストOSでphpを動かしている想定です
vagrantやdockerコンテナ内のphp.iniに下記を追記してください

##### XDebug2系の場合
[XDebug]
;xdebug.soの場所が違う場合、変えてください
zend_extension = /usr/lib64/php/modules/xdebug.so
;dockerのphp:\<version\>-apacheイメージの場合下記にあると思います
;dockerのphp:\<version\>-apacheイメージにxdebugをインストールした場合、
;zend_extensionを書かなくてもdocker-php-ext-xdebug.iniが自動で作成されその中に
;zend_extensionが書かれていると思います
;zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_host = 10.0.2.2
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_autostart = 1

##### XDebug3系の場合
[XDebug]
;xdebug.soの場所が違う場合、変えてください
zend_extension = /usr/lib64/php/modules/xdebug.so
;dockerのphp:\<version\>-apacheイメージの場合下記にあると思います
;dockerのphp:\<version\>-apacheイメージにxdebugをインストールした場合、
;zend_extensionを書かなくてもdocker-php-ext-xdebug.iniが自動で作成されその中に
;zend_extensionが書かれていると思います
;zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.discover_client_host = false 
xdebug.client_host = 10.0.2.2
xdebug.client_port = 9000
xdebug.mode = debug
xdebug.start_with_request = yes

#### Docker for Windows、Docker for Macの場合
ホストOSでeclipseを動かしゲストOSでphpを動かしている想定です
dockerコンテナ内のphp.iniに下記を追記してください

##### XDebug2系の場合
[XDebug]
;xdebug.soの場所が違う場合、変えてください
;dockerのphp:\<version\>-apacheイメージにxdebugをインストールした場合、
;zend_extensionを書かなくてもdocker-php-ext-xdebug.iniが自動で作成されその中に
;zend_extensionが書かれていると思います
;zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_autostart = 1

##### XDebug3系の場合
[XDebug]
;xdebug.soの場所が違う場合、変えてください
;dockerのphp:\<version\>-apacheイメージにxdebugをインストールした場合、
;zend_extensionを書かなくてもdocker-php-ext-xdebug.iniが自動で作成されその中に
;zend_extensionが書かれていると思います
;zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.discover_client_host = false 
xdebug.client_host = host.docker.internal
xdebug.client_port = 9000
xdebug.mode = debug
xdebug.start_with_request = yes

## 動作確認
webサーバーを起動して、公開フォルダにphpファイルを置きましょう
公開フォルダに置いたphpファイルと同じディレクトリ・ファイル構成でphpファイルをeclipseのプロジェクトに配置します
eclipseのPHPプロジェクトはメニューバーのファイル→新規→プロジェクトで
新規プロジェクトウインドウを開き
PHP→PHPプロジェクトを選択→次へボタンクリック→プロジェクト名を入力し完了ボタンをクリックでできます
(PHPプロジェクトでないとブレークポイントで止まりません)
今回の動作確認ではtestという名前のPHPプロジェクト直下にindex.phpを置いてみます。webサーバーの公開フォルダにはtestフォルダを作成しその中に同じindex.phpを置きました
phpファイルを右クリック→デバック→PHP Web アプリケーションをクリック
![m.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/4120aefd-c29a-3123-0fe7-09deb608862e.png)

入力可能なセレクトボックスがでますので、自分のwebサーバーのURLを入力しOKをクリック
これでPHPを実行できます
![n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/c7d53aae-2943-28e1-9b6a-f48c43d8a557.png)

phpファイルの行番号をダブルクリックしてブレークポイントを付けていればそこで止まります
ブレークポイントを付けずに実行した方は、ブレークポイントを付けて、ブラウザを再読み込みしてみて下さい
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/5b2d0126-50b6-2b66-9fcc-80a251a9e5c4.png)

ブレークポイントで止まった後の操作は下記です
![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/ce7ada1d-54fa-8a59-0a72-d948e107fe83.png)

ブレークポイントで止めるとその時点の変数の値が変数ビューで見れます。変数ビューの値の部分を書き換えれば、変数に好きな値を格納できます
eclipseでビューを表示する方法は、メニューバーのウインドウ→ビューの表示から好きなビューを表示できます。変数ビューが表示されていない人はそこから表示させてください
![c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/8224af39-bd3e-2690-72de-f21cff3a1a91.png)

ブレークポイントで止めて、式ビューにPHPのワンライナーを書くと、その時点の変数の値を使用してワンライナーを実行できます
![d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/cba4b483-f040-76b8-142b-22a5dde3fd75.png)

eclipseを使う上で絶対に覚えておきたいショートカット
(1) ctrl + shift + r ： リソース検索(ファイル名検索し、開けます。ワイルドカード使用可)
(2) ctrl + k ： 下に向かって検索(エディタ内で検索したい文字列を選択状態にしてctrl + k)
(3) ctrl + shift + k ： 上に向かって検索(エディタ内で検索したい文字列を選択状態にしてctrl + shift + k)
(4) ctrl + o ： メソッド検索(エディタ内でctrl + oでそのファイル内に定義されている関数を検索しそこへ移動できる。ワイルドカード使用可)
(5) F3 ： 宣言を開く(関数をクリック(クリックしたら放していい。キャレットが関数部分にあればいい)し、F3を押すと、その関数が定義されている場所に移動できる)

エクスプローラーの双方向矢印アイコンをクリックし有効にするとエクスプローラーとエディタがリンクするようになります
![e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/94e9d4ac-8d21-400d-7a11-31ddc98390c4.png)

一度デバッグをするとデバッグの構成に保存されます
![o.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/82af3875-4258-bcb0-013b-b4b80e585475.png)

PHP Webアプリケーションのところに先ほどのデバッグが入っているので、デバッグするファイルやURL、サーバーの変更をここでできます。
デバッグボタンをクリックすればデバッグが開始されます。
また、PHP Webアプリケーションをダブルクリックすると新しいデバッグの構成を作成できます
![p.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/587f6bf6-5b72-edb3-e5a0-ce1ff5279ca2.png)

デバッグの構成へのショートカットとして虫アイコンがあり、
虫アイコンの右の▼をクリックすると、直近で実行したデバッグの構成が出てきます。
また、デバッグの構成をクリックすれば、先ほどのデバッグの構成の設定ウインドウが立ち上がります
![q.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/eb209680-1062-408c-9d5f-6ed6cb8e510b.png)

# 次の記事
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)