把简单的事情做好

0%

Docker 环境下的 PHPSTORM DEBUG

开发环境下快速定位程序问题最好的方式就是 DEBUG 了,可以清楚查看程序调用堆栈及变量的值。本文将带来在 Docker 环境下配合 PHPSTORM 如何快速 DEBUG,并通过以下两种方式 DEBUG 程序

  • 通过 外部URL DEBUG 程序(包括浏览器,Postman 等)
  • 通过命令行 DEBUG 程序

docker 环境配置

如何快速搭建一套 php 的 docker 开发环境,本文就不详细描述了,可以查看Docker LNMP开发环境这篇文章。

如果你是基于Docker LNMP开发环境搭建的开发环境,就可以跳过这部分直接看下一节的内容。否则,就需要首先在 docker 的 php 环境需要安装 xdebug 扩展,可以参考上面的这篇文章。环境问题解决好以后,主要需要修改的地方就是 php.ini 配置文件了,打开配置文件,加入以下配置

1
2
3
4
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

配置中的 host.docker.internal 表示的是 docker 所在宿主机的 ip 地址,也就是 IDE 所在环境的地址。配置好以后,执行 php -i 检查配置是否生效。

PHPSTORM IDE 配置

打开 Preferences > Language & Frameworks > PHP > Servers,点击 + 号,添加 server 配置,输入名称及程序对应的 host或者ip。尤其需要注意的地方,需要勾上 Using path Map 选择本机程序目录和服务器目录相对应就可以了,如下:

phpstorm_server_setting

之后点击确定。DEBUG 的配置保持默认,注意监听 9000 端口。

然后,打开 RUN > Edit Configurations,点击 + 号选择 PHP Remote Debug ,选择刚才配置好的 server ,IDEKEY 填入 PHPSTORM 跟 xdebug 的配置保持一致。如下:
phpstorm_remote_debug_setting
之后点击 DEBUG 开始监听,在程序合适的地方打上断点。

浏览器 DEBUG

浏览器当然会选 Chrome ,安装 Xdebug Helper扩展。安装完以后,右击刚安装好的浏览器上方的小虫子,配置 IDE key,IDE 选择 PHPSTORM,key 填入 PHPSTORM 点击 save。如下

chrome_xdebug_setting

点击小虫子,选择 DEBUG,这时候小虫子会变绿。然后点击访问,顺利的话,你的 IDE 会自动切换到你的面前,停留在断点的位置。

phpstorm_begin_debug

CLI(命令行)DEBUG

在 DEBUG 之前一定要确保配置好的 IDE DEBUG 是处于监听状态的
必须在容器内执行脚本

进入容器,执行 export XDEBUG_CONFIG="IDEKEY=PHPSTORM",在相应的控制台程序或运行脚本中打上断点,执行脚本,然后就开始 debug 你的程序吧!

取消设置也很简单,执行unset XDEBUG_CONFIG

原理小觑

首先,我们配置好了带有 xdebug 扩展的 php 环境。当接收到环境变量(cookie 或者 env)中 IDEKEY 为 PHPSTORM 的请求后,就会将请求的控制权交给 IDE 去处理。注意在调试期间不接受新的 DEBUG 请求。所以,我们也很容易通过 Postman 来触发调试,只需要在 cookie 中添加响应的键值对就可以达到目的。