(2016/03/04 追記) Xdebug 2.4.0が正式版になりました。動作確認済です。
PHP7に暫定対応しているXdebug2.4.0RC4でリモートデバッグをやってみました。出来ないという噂も聞いていたのですが、問題なく実行できたので、メモがてら手順を書いておきたいと思います。
検証環境
今回はDocker(OSXにインストールしたdocker-machineにてDockerホストを作成)上のPHPで実行していますが、手順さえ取り違えなければVagrantでも問題なく実行できるかと思います。
- OSX El Capitan(ホストマシン)
- docker-machine 0.6.0 (Docker 1.9.1)
- CentOS 7.2(コンテナOS)
- Apache 2.4.6
- PHP 7.0.3
- Xdebug 2.4.0RC4
- Lumen 5.2
- PHPStorm 10.0.3
Xdebugをインストールする
バイナリからインストールすることも出来ますが、CentOSでPHPを動かしている人はだいたいremirepoからインストールしているかと思います。2.4.0RC4もすでに公開されていますので、特別な事情がなければそのままyumからインストールすればいいと思います。
yum install --enablerepo=remi-php70 php-xdebug
php.iniに設定を追記する
php.iniに対してリモートポートなどの情報を追加します。設定値はこちらのサイトを参考にさせて頂きました。
IPアドレスはルーターなどから割り当てられているIPアドレスを指定するのではなく、virtualboxが生成したNICに割り当てられているIPアドレスを指定します。調べる方法なのですが、var_dump($_SERVER)
して、HTTP_X_REAL_IP
の中身を入れればOKです。
ポートはデフォルトで9000を使っているようですが、PHP-FPMもデフォルトで9000を使っていたりする関係上、結構衝突することがあるようです。では代わりにどこを使うかというところなのですが、Wikipediaのポート番号一覧を見てみると、49152からIANAで管理されていないプライベートなポート番号だと書かれていますので、個人的に49152-65535の帯域から適当に選んで使っています。
ただし、ホストに公開するポート番号は重複が許されていないため、コンテナ毎にポート番号を変更しておく必要が出てくるかと思います。
[xdebug]
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host="$_SERVER['HTTP_X_REAL_IP']を見てセット"
xdebug.remote_port=49190
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
xdebug.max_nesting_level=1000
xdebug.idekey="PHPSTORM"
コンテナを起動する
Dockerホストに対してphp.iniで指定したポートを公開してコンテナを起動します。先ほどのポート番号であれば-p 49190:49190
をいつもの起動コマンドに付け足せばOKです。EXPOSEは必要ありません。
Vagrantで行う場合はファイアウォールを設定していない限りはDockerのようなポート開放の操作は必要ないと思います。
PHPStormで設定する
あとはPHPStormの設定画面でコンテナのIPアドレスとポート番号を設定すればいけるはずです。ちなみに、PHPUnitでユニットテストを行った際のコードカバレッジ算出・レポート出力なんかも見ている限りでは問題なく出来ているようです。