CentOS6 xdebug+VSCodeでPHPをデバッグする

検証環境

検証日時

  • 2018/08/09

 

コンテナの作成

mkdir ~/src && cd ~/src

echo "<?php echo phpinfo();" > index.php

touch Dockerfile

 

Dockerfileを編集*1

FROM centos:6

RUN yum install -y php httpd

# xdebugのインストールに必要/pecl
RUN yum install -y php-pecl-apc

# xdebugのインストールに必要/phpize
RUN yum install -y php-devel

# xdebugのインストールに必要/c compiler
RUN yum install -y gcc

RUN pecl install xdebug-2.2.7

 

Dockerfileからイメージをビルド*2

docker build -t xdebug .

docker run -it -p 80:80 -v ~/src:/var/www/html xdebug

 

サーバーの設定

touch /etc/php.d/xdebug.ini

 

xdebugの設定ファイルを編集*3 *4

zend_extension=/usr/lib64/php/modules/xdebug.so

xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=ホストPCのIPアドレスを指定*5
xdebug.remote_port=9001
xdebug.remote_autostart=1

 

httpdを起動

service httpd start

 

ブラウザから仮想マシンにアクセスしてphpinfo関数が実行されることを確認

 

VSCodeの設定

PHP Debugの設定ファイルを編集

"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"serverSourceRoot":"/var/www/html",
"localSourceRoot":srcフォルダのフルパスを指定

 

index.phpブレークポイントを設置して「デバッグの開始」を実行

適切に設定できている場合、ブラウザのページをリロードするとブレークポイントで処理が停止

 

ブレークポイントで処理が止まらない場合

xdebug.iniに追記*6

xdebug.remote_log=/var/log/xdebug/remote.log

 

ログファイルの保存先ディレクトリを作成

mkdir /var/log/xdebug && chown apache /var/log/xdebug

 

変更したxdebugの設定を反映するためhttpdを再起動

service httpd restart

 

ブラウザのページをリロードするとログファイルが作成されているので確認

cat /var/log/xdebug/remote.log

 

以下のメッセージの場合①

E: Time-out connecting to client. :-(

=> xdebug.iniのremote_hostが間違っている可能性があるので他のIPアドレスに変更

 

以下のメッセージの場合②

 I: Connected to client. :-)

=> xdebug.iniのremote_portがホストまたはサーバーで使用中の可能性があるので他の番号に変更