PHPStrom远程调试服务端
最近修改遗留的php服务端,我一个php新手,对php不熟悉。这服务端修改起来全靠打log。真心累。在想能不能单步调试服务端,这样调试起来不就一览无余明朗多了,客户端app只要一请求,ide就停在断点上,供我调试。果然Google一阵后phpstrom没让我失望
1 开发环境上安装phpStrom
2 服务端安装php xdebug
3 xdebug配置
将 php.ini 最后加入如下信息
[xdebug]
zend_extension="/usr/lib64/php/modules/xdebug.so" # 这是xdebug扩展路径
xdebug.idekey="PHPSTORM"
xdebug.remote_host=127.0.0.1
xdebug.remote_enable=on
xdebug.remote_port=9001 # 端口号,可自定义
xdebug.remote_handler = dbgp
4 PHPStrom设置
打开设置 Language & Framework -> PHP -> Debug 设置 xdebug端口和pip.ini一致
Paste_Image.png打开设置 Language & Framework -> PHP -> Server 配置
1.png添加一个服务器,配置服务地址 端口,debuger要选 xdebug 。要配置服务器端代码和本地代码直接的文件路径映射
编辑run/debug配置 增加一个 php web application ,选择刚刚增加的server
Paste_Image.png打开 debug监听
Paste_Image.png点击 电话的那个按钮变成如图的状态
5 设置端口映射
以上已经配置就绪。但是服务端的debug信息无法直接下发到客户端。还记得前面php.ini里的配置 ,remote_host地址是localhost ,相当于php环境收到的debug信息是转发给,127.0.0.1:9001的。我的ide是无法收到调试信息的。如果我们的pc有公网ip。那直接把remote_host配置成自己的ip就行了。如果没有需要设置一下端口映射。执行下面命令即可。
ssh -R 9001:localhost:9001 root@服务器的IP地址
前面的9001是要转发的服务器的debug端口。后面的9001是 phpstrom监听的debug端口
6 开始调试
通过在请求里面带上 XDEBUG_SESSION 参数,并且把参数值设置为之前XDebug里面配置的“idekey”的值,我们设置的是PHPSTROM 就可以激活服务端的调试。
例如,可以在POST或者GET参数里面加上 XDEBUG_SESSION=PHPSTORM,服务端就会启动调试了。 比如我们要调试 http://www.abc.com/test.php,那么访问链接http://www.abc.com/test.php?XDEBUG_SESSION=PHPSTORM 就可以启动调试了。
具体的原理是这样的,服务端收到请求后,XDebug会检查参数里面的XDEBUG_SESSION值是否等于“idekey”的值,如果相等,那么就说明需要调试,否则就不调试。这个参数也可以设置在Cookie里面。为了调试方便,可以把下面的两端脚本作为链接收藏到书签栏,每次如果要调试就调用第一段脚本在Cookie里面写入XDEBUG_SESSION参数,如果要停止调试,那么就调用第二段脚本移除XDEBUG_SESSION参数的值。
javascript:(function() {document.cookie='XDEBUG_SESSION='+'PHPSTORM'+';path=/;';})()
javascript:(function() {document.cookie='XDEBUG_SESSION='+''+';expires=Mon, 05 Jul 2000 00:00:00 GMT;path=/;';})()
当然,如果我们调试的app端的api。我们只要在请求的时候增加一个 参数 'XDEBUG_SESSION='+'PHPSTORM'即可。当客户端出现请求,如果你设置了断点就会立即停止在断点,供你调试,单步执行,对于新手爽歪歪