首先我本地开发环境是win10系统,然后要远程调试的服务器是centos7,win10是内网环境,服务器是在公网环境。
网上搜到的部分教程,php.ini配置xdebug,配置开发机内网地址,那只适用于开发机和服务器是同一个网段的网络环境。
但是不在同一个网段的话,比如开发机内网,一台服务器外网,这需要通过DBGP代理实现流量转发,ssh隧道端口映射,这样服务器才能主动跟开发机通讯,参考方法。
还有另外一种方法是通过路由器做端口转发,以我的AC68U为例:
192.168.50.73是开发机的内网地址,配置DBGP代理端口9003,流量转发到开发机。即可实现远程调试。
一般是从路由器wan口配置中能找到。
xdebug通过dbgp的连接方式:
这里可以注意到DBGP端口是双向的,也就是说开发机和服务器,都是需要这个端口主动跟对方通讯。这就是需要端口映射的原因。这个官方文档的图中还把xdebug.remote_connect_back配置为1,我试过这样配置,IDE只能注册到DBGP代理,但是没办法断点调试,原因未知。我的xdebug扩展配置如下
[xdebug]
;xdebug的扩展路径
zend_extension=/www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
;启用远程调试
xdebug.remote_enable = 1
;默认已经打开dbgp配置,无需配置
;dbgp代理地址
xdebug.remote_host=127.0.0.1
;dbgp代理端口
xdebug.remote_port = 9000
以下再简单讲一下配置流程
1.下载xdebug扩展,编译安装,并配置到php.ini,成功安装可以,通过phpinfo()看到相关配置。参考链接
2.服务器搭建DBGP代理环境,这里使用pydbgpproxy,启用代理的时候,提示找不到依赖模块,请按照原博客说明修改源代码。参考链接
3.IDE配置,我是用phpstorm开发,以这个为例。按图配置
注册完之后,客户端发送请求的时候,得在url或者请求体中携带XDEBUG_SESSION_START这一个参数,或者从cookie中携带XDEBUG_SESSION参数,参数值就是IDE_KEY,比如IDE_KEY是PHPSTORM,服务器地址是www.server.com,web端口是80,可以这样访问
http://www.server.com?XDEBUG_SESSION_START=PHPSTORM,如果是chrome浏览器可以使用https://chrome.google.com/webstore/detail/eadndfjplgieldjbigjakmdgkmoaaaoc这一个调试插件,
爬虫图标选择Debug,访问web即可。远程调试正常的情况下,又没有触发任何断点,会有这样的警告信息
这里推断的原因,是可能没有匹配到php的映射文件,又或者是本地项目文件没有跟远程文件同步好。这里可以通过配置SFTP进行文件差异比较,从本地文件同步到服务器或者是从服务器同步到本地。按下图配置
配置完之后,可以打开相应的php脚本,右键菜单,选择比较本地远程的文件版本
这里能显示文件差异之处。我这里是首页文件内容一致,所以在第二行和第四行打断点都是能够触发断点调试的。
以上就是所有配置,如有遗漏,相关问题,欢迎底下回复。