很多 PHPer 想体验 PHP 的断点调试功能,第一步败在没有很好的 IDE 上,第二步败在 IDE 配置上。而 phpstorm 已是当下最好用的 PHP IDE 了,我们就通过这篇文章好好讲讲吧。
一、xdebug设置
- PHP 安装 xdebug 扩展步骤
【略】
2. PHP.ini 设置
;php.ini 配置调试相关参数
;必须以zend模块 加载xdebug
[xdebug]
zend_extension=xdebug_module_goes_here
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9800
二、xdebug 基本原理
- 简单来说分两步
一、IDE 监听一个端口。
二、当一个请求执行过程中PHP 启用了 xdebug,将断点信息发送到 IDE 监听的端口。
2. 如果服务器不在本地怎么办?
我们需要保证服务器与本机互通性,xdebug.remote_host 设置为 IDE机器的 IP
3. 如果服务器不在本地,也没法连接到本地怎么办?
我们可以祭出 ssh 隧道技术
ssh -f -R9911:127.0.0.1:9911-N artisan@110.119.120.100
在服务器上打一个洞映射到本机的同一个端口,这样 xdebug 发送数据到服务器机器上的端口就能被 IDE机器监听到了。
4. 如果需要多个人分别 debug 互相不打扰怎么办?
这时我们用到了一个叫做 DBGpProxy 的东西,如下图所示
DBGpProxy 把自己当做 IDE 监听了一个端口,xdebug 把请求数据发给 DBGpProxy 后,DBGpProxy 再分发给每个 IDE。
每个 IDE 上设置 DBGpProxy 的 IP 和 port,并且发送注册指令告知 DBGpProxy 他的唯一标识 IDE_KEY
当发起请求中的 header 或者 query 中的字段携带了XDEBUG_SESSION_START=PHPSTORM 则会由 xdebug 发给 DBGpProxy ,再转发给对应的 IDE。
这一段比较绕,需要结合图示和文字好好想清楚。
5. DBGpProxy Server 到哪里下载?
下载,解压,执行py脚本
KOMODO IDE DEBUGGER PROXYcommunity.activestate.comcd /usr/local/bin
export PYTHONPATH="${PYTHONPATH}:/opt/bin/pydbgpproxy/pythonlib" && ./pydbgpproxy -d 127.0.0.1:9800 -i 0.0.0.0:9901&
三、Chrome Xdebug helper
清楚了原理以后,我们来做一些设置简化 debug 的操作,下载扩展
启用 debug 时仅仅是多帮我们在请求时传了一个参数而已。
四、phpstorm IDE 设置
文章写的比较仓促,欢迎回帖交流。
Debugger and Profiler Tool for PHPxdebug.org Chrome Xdebug Helperchrome.google.com Xdebug 多用户配置derickrethans.nl PhpStorm, XDebug, and DBGp Proxywww.cnblogs.com