Edited at

PHPStormでステップ実行(Docker Toolbox環境)

More than 1 year has passed since last update.

※Docker for Mac(Windows)の場合は以下を参照してください。

https://qiita.com/yKanazawa/items/363ba93f8a376c5b9e75

Vagrant共有フォルダ機能を利用し、PHP StormでXDebugでステップ実行している方も多いと思いますが、Docker Toolbox環境でも可能です。

Docker Toolboxから起動したDocker machineのIPアドレスは、

デフォルトでは、192.168.99.100になりますが、

Docker Machineのコンテナ内において、

xdebug_remote_hostを192.168.99.1に設定することで、

ローカルPC内のPHP Stormと通信することが可能になります。


コンテナ内のphp.d/xdebug.ini設定

コンテナ構築時に、php-pecl-xdebugをインストールし、php.d/xdebug.iniに以下の設定をしておきます

[xdebug]

zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_port = 9000
;xdebug.remote_autostart = On
xdebug.remote_host = 192.168.99.1
xdebug.profiler_output_dir = "/tmp"
xdebug.max_nesting_level= 1000
xdebug.idekey = "PHPSTORM"

※xdebug.remote_autostart = onのコメントアウトを解除すると、PHP Storm側でステップ実行が可能になりますが、 PHP Stormがないと処理が先に進まなくなるため、普段はコメントアウトしています


VirtualBoxの共有フォルダ設定

ここでは、以下の前提で設定します。

フォルダーのパス:D:\cygwin64\home\username

フォルダー名:Users

image


コンテナのマウント設定


  • D:\cygwin64\home\usernameにwwwディレクトリを作成


    • Docker Machine内では/Users/www/ディレクトリと共有される



  • D:\cygwin64\home\username\wwwにtestプロジェクトを配置

  • wwwディレクトリをコンテナ起動時に-vコマンドでマウント

docker run \

--name $DOCKER_NAME \
-v /Users/www:/var/www \
--hostname $DOCKER_NAME \
--privileged \
-d $IMAGE_NAME


PHP Stormの設定

Macの場合:PHPStorm -> Preferences... > Languages & Frameworks > PHP > Debug

Windowsの場合:File -> Settings... > Languages & Frameworks > PHP > Debug

において、以下のように設定

image

Preferences... > Build, Execution, Deployment > Deployment

+を押下

Connectionタブにおいて以下のように設定

image

Mappingsタブ

image

Preferences... > Languages & Frameworks > PHP > Servers

+を押下

1.png


ステップ実行の設定

PHPStorm画面右上にある電話アイコンをクリックし、connectを有効にします。

image

※有効にすると、コンテナからローカルPC(192.168.99.1)に対して9000番ポートで通信できるようになります

$ telnet 192.168.99.1 9000

Trying 192.168.99.1...
Connected to 192.168.99.1.
Escape character is '^]'.


PhpStorm Debug設定

Run > Edit Configurations...

+を押下

PHP Remote Debugを選択

image


  • 先ほど設定したServersを選択

  • Ide key(session id)にphp.iniのxdebug.idekeyを設定

  • 「OK」ボタンを押下


ステップ実行の開始


xdebug.ini設定

コンテナ内のphp.d/xdebug.iniの

xdebug.remote_autostart = On

のコメントアウトを解除します

[xdebug]

zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_port = 9000
xdebug.remote_autostart = On
xdebug.remote_host = 192.168.99.1
xdebug.profiler_output_dir = "/tmp"
xdebug.max_nesting_level= 1000
xdebug.idekey = "PHPSTORM"

httpdを再起動します

sudo service httpd restart


ステップ実行の開始

PHP Stormでブレークポイントを設定しておくと、設定した箇所からステップ実行できるようになります。

例えば、app_controllerのbeforeFilter内にブレークポイントを設定して

http://dev.example.jp/

にアクセスすると、ブレークポイントの箇所からステップ実行が可能になります。

image