1 本机的 xdebug 配置
1.1 xdebug 的安装
可以使用 php -v
命令查看是否已经安装了 xdebug
如果没有安装,可以参考 Xdebug 官方文档进行安装。
然后我们需要用php --ini
查看配置文件路径,然后在 php.ini 文件中配置以下内容:
1 | [XDebug] |
1.2 PhpStorm 的配置
php 在处理 web 请求时都是通过 Nginx 将请求转发给 fpm,当我们在本地进行简短的代码调试时,再起一个 Nginx 服务就显得有些笨重了,好在自 PHP 5.4.0 起,CLI SAPI 提供了一个内置的 Web 服务器,这样,我们本地调试 web 请求时只需启动 fpm 即可。
首先,我们要在图示位置设定好 PHP 解释器
然后,修改 debug 监听端口为 9001
设置 DBGp 代理,注意需和 debug 配置中的一致
设置监听服务器
1.3 调试
需要注意的是,调试分为 cli 与 web 两种模式,仅在 debug web 请求时才需要开启 ,cli 模式下的调试无需开启
1.3.1 cli 下的调试
1.3.2 web 下的调试
在代码中设置好断点后,开启,然后浏览器访问 http://localhost:8000/debug.php ,即可在 IDE 中获取断点信息
2 Docker 环境下的 xdebug 配置
2.1 配置 Laradock
2.1.1 修改 laradock/.env
打开 .env
文件,修改下列配置项:
1 | WORKSPACE_INSTALL_XDEBUG=true |
2.1.2 配置laradock/php-fpm/xdebug.ini
php-fpm 用于调试 php 的服务器模式,基于浏览器请求
1 | ; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini) |
2.1.3 配置 laradock/workspace/xdebug.ini
workspace 用于调试 php 的命令行模式
1 | ; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini) |
2.1.4 重新构建 php-fpm 和 workspace 容器
1 | $ docker-compose build --no-cache php-fpm workspace |
2.1.5 重新启动容器
1 | $ docker-compose up -d workspace |
2.1.6 查看 xdebug 是否安装成功
方式一
workspace 容器中查看
方式二
laradock 根目录查看 xdebug 状态
2.1.7 xdebug 状态管理
在 laradock 根目录执行以下命令管理 xdebug,安装成功默认已启动
1 | $ ./php-fpm/xdebug start/stop/status |
2.1.8 确认 xdebug 配置变更在容器中生效
2.2 配置 PhpStorm
2.2.1 配置 debug
打开 Preferences > Languages & Frameworks > PHP
2.2.2 配置 DBGp Proxy
打开 Preferences > Languages & Frameworks > PHP > Debug > DBGp Proxy
此处的IDE key
配置需与xdebug.idekey
一致
2.2.3 验证配置
填写校验脚本地址时,需是项目根目录,如 laravel 是 public 目录。
2.2.4 添加服务器
打开 Preferences > Languages & Frameworks > PHP > Server
由于项目是在容器中运行的,因此需要配置项目宿主机路径与容器路径的映射关系。
此处可配置多个服务器,适用于多个项目间的切换。
2.2.5 设置 debug
由于是在容器中运行的,所以需要选择 PHP Remote Debug
2.3 开始 debug
总结
善用 xdebug,不仅能摆脱var_dump()
的原始断点调试,提升我们的工作效率,也能很好的追踪代码的调用,在排查故障与学习优秀框架时能事半功倍。