30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker上で実行しているPHP7のリモートデバッグを行う

Last updated at Posted at 2016-02-27

(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の帯域から適当に選んで使っています。

ただし、ホストに公開するポート番号は重複が許されていないため、コンテナ毎にポート番号を変更しておく必要が出てくるかと思います。

/etc/php.ini
[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でユニットテストを行った際のコードカバレッジ算出・レポート出力なんかも見ている限りでは問題なく出来ているようです。

30
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?