ThinkPHPphpstromPHP实战

PHPStrom远程调试服务端

2017-03-02  本文已影响188人  木兮家先生

最近修改遗留的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 配置

添加一个服务器,配置服务地址 端口,debuger要选 xdebug 。要配置服务器端代码和本地代码直接的文件路径映射

1.png

编辑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'即可。当客户端出现请求,如果你设置了断点就会立即停止在断点,供你调试,单步执行,对于新手爽歪歪

上一篇下一篇

猜你喜欢

热点阅读