開発環境をDockerで構築することが多くなってきたと思いますが、それをデバックする事例で新し目のやつが見当たらなかったので共有です。
Ubuntu17.04で確認していますが、Mac + Docker for Mac でもWindows + Docker for Windows でも動作するはず。。です。
もし動かなかったらコメントください!
その他、主だったツールのバージョン
Docker version 17.09.0-ce
PHP 7.1.10
PhpStorm 2017.2.4
Dockerでphp7.1を動かす
深く考えず公式イメージのapache-7.1タグのを使用します。
xdebugがインストールされていないのでそれだけ追加します。
FROM php:7.1-apache
RUN pecl install xdebug
php.iniにxdebugを使うための最低限の設定を書きます。
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
xdebug.idekey = "PHPSTORM"
xdebug.remote_autostart= 1
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
php:7.1-apacheってphp.ini入ってないんですね。。
いやびっくり。
本当に最低限の設定だけしています。実際はたくさん設定を書く必要があるでしょう。。
あとステップ実行の動作を確認するための index.php
ステップ実行してることを確認したいので簡単に変数やループを使ってみます。
<?php
$str = "";
for ($i = 0; $i < 10; $i++) {
$str .= "+";
echo $str . "<br/>";
}
phpinfo();
最低限の設定をしたdocker-compose.yml
version: "3"
services:
apache-php71:
build: .
ports:
- "80:80"
volumes:
- "./:/var/www/html"
カレントディレクトリをDocumentRootにします。
いままで生成したファイルはカレントディレクトリに全部置きます。
php.ini
がDocumentRoot配下にあるとか恐ろしい構成ですが、これでapacheが読んでくれるので。とりあえずテストのためです。繰り返しますが実際の環境では(ry
フラットなディレクトリ構成
--+- カレントディレクトリ
+ docker-compose.yml
+ Dockerfile
+ index.php
+ php.ini
用意ができたらおもむろに起動
docker-compose up
起動したらhttp://localhost
にアクセスしてphpinfoが表示されれば成功です。
xdebugが有効になっていることも確認
PhpStormから接続する
- PhpStormでindex.phpが存在するディレクトリを開く
- File > Setting でSettingダイアログを開く
- Settingダイアログで Languages & Frameworks > PHPを選択
- Debug > DBGp Proxyに値を設定
IDE key:PHPSTORM
Host:localhost
Post:9000
- Serversに値を設定
Name:なんでも
Host:localhost
Post:80
Debuggger:Xdebug
Use path mappings にチェック
カレントディレクトリを /var/www/htmlにマッピング
今回はPHPが1ファイルしかないのでマッピングはひとつだけですが、実プロジェクトではディレクトリ毎にマッピングが必要になることでしょう。
以上で準備完了。
ステップ実行する
- PhpStormのメニュー > Run > Start Listening for PHP Debug Connections を選択
- index.phpにブレークポイントを設定。
- ブラウザで
http://localhost
をリロード - ブレークポイントの場所で止まった!
変数の中身が丸見えです。いいですね。
F8でステップアウト、F7でステップイン、F9でレジュームです。
ネットではホストOS側のIPアドレスの扱いが難しい的な例がたくさんあったのですが、特に問題ありませんでした。
PhpStormが頑張っているのかな?
いずれにせよ思ったより簡単に用意できました。
ちなみにこのテストコードは以下に置いています。cloneすればそのまま動作するはず。
https://github.com/furu8ma/docker_php71_xdebug_test
では良いデバックライフを!