phpでブレークポイントを貼りたい
docker(docker-compose)を使っていて、phpのローカル環境を使って構築しているのですが、
ブレークポイントが貼れたら楽になるんだろうなぁと思ってました。
ググってみると、qiitaなどでやり方が書いてあるのでやってみるのですが、なかなかうまくいかない。
空いてる時間を見つけて、ちょっとやってみる→諦める→やってみる→諦める→やってみる→できた!!
とちょっと苦戦したので、私がつまずいたところを交えながら書いていこうと思います。
環境
Docker version 17.03.0-ce, build 60ccb22
(たぶん、 Docker for Macを使用しています。)
docker-compose version 1.11.2, build dfed245
PHP 7.0.14
nginx + php-pfm で作成
手順
ポート番号(9000)の解放
以下の「- 9000:9000」の部分です。
services:
web:
build: docker/nginx
ports:
- 80:80
- 9000:9000
ポートを(9001に)変えたい場合は、「9001:9000」とすればよいですよ。
php.ini 追記
Dockerfileと同じ階層にmy.iniファイルを作成(拡張子が「.ini」ならファイル名はなんでもOK)
ここでremote_hostをlocalhostではなく、自分のIPアドレスにすること!
[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=[IPアドレス]
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
「xdebug.remote_autostart」は常にデバッグ情報を送り続けます。ローカル環境ならよいでしょう。
xdebug.remote_autostartはオフにする場合は、idekeyやブラウザの拡張機能を云々する必要があります。(リモートのサーバなどはオフにしましょう。)
「zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"」←こんなやつは必要ありませんでした。たぶんこれは、localhostの場合。
下の設定はDocker for Macの場合は入れてはいけないらしいです。
xdebug.remote_connect_back=1 <--- これはダメ これはlocalhostの場合(?)
IPアドレスはMacのネットワーク設定から調べてください。
DHCPにしてるとIPが変わりますが、
エイリアスをきることで変更不要にすることも可能。(が、私はしない。)
※ docker 17.06からは「docker.for.mac.localhost」というドメインが使えるそうです。
xdebug
Dockerfileに以下を追記(peclがある前提)
my.iniファイルを読み込ませる。
RUN pecl install xdebug && docker-php-ext-enable xdebug
ADD ./my.ini /usr/local/etc/php/conf.d
修正が完了したら、dockerをbuildしてください。
Atomの設定
まず、「php-debug」のパッケージを入れる。
環境設定->Install から 「php-debug」で検索するとでてくると思います。
php-debugの設定を2つ(Pash MapsとServer Address)変更する。
Path Maps
[リモートパス];[ローカルパス] のように書きます。例↓
/var/www/html;/Users/m-kushima/git/test_project
ローカルパスはフルパスで書いてください。
最初は「~/git/test_project」と書いてました。フルパスでないとどこかわからないですよね。
※ 設定はAtomで一つしかもてないようですなので、ディレクトリを変更する場合はいちいち変更しないいけないみたいです、多分。
Server Address
上のmy.iniに書いたIPアドレスを指定してください。
※ 「docker.for.mac.localhost」の場合は、編集しなくてよいはずです。
ポートを変更したら、Atomの設定も変更しましょう。
あとはブレイクポイントを貼るだけ!
php-debugのパッケージを入れてからAtomの左下あたりに、以下のボタンができています。
クリックすると
下の方に以下のようなものがでてきます。これが出てきている間だけ監視しているようです。
(ここでエラーが出る場合は、IPアドレスがおかしいです。)
ブレイクポイント貼り方
ソースの左側にクリックすると青い●ができれば貼れてます。
(若干押しにくいです。入力部分のすぐ左になります。)
ブラウザでアクセスしてみると、
↓Atomに移動してきます!(こうなれば成功!)
名称 | 説明 |
---|---|
Continue | 続ける |
Step Over | 1行ずつ進める(次の行が関数のときは、その関数は最後までいく) |
Step In | 1行ずつ進める(次の行が関数でも、1行ずつとかそんな感じ。) |
Step Out | 現在の関数から抜け出す(そんな感じ) |
Step Stop | 止める |
Stack | ソース(行数)が表示される |
Context | 変数が見れる。「▶︎」をクリックすることによりネストを開く。(上限やネストの深さの設定がある。) |
WatchPoints | デバックしたい変数を入力すると教えてくれる。 |
BreakPoints | 張っているブレイクポイントの場所を表示 |
参考サイト
https://qiita.com/masch/items/1b51e3fd503f574347f9
https://qiita.com/neronplex/items/785c9df4328608f8544d
https://qiita.com/Y-Kanoh/items/a317ceeaca16e96e0a3e