碰着的问题
要实现PHP远程打断点调试,首先须要办理最大的问题是做事器怎么访问本地,其次的是线上环境的配置和本地的配置。
先办理做事器和本地通讯的问题。

目前我所知道的有三种通讯办法,一种是与做事器建立隧道,一种是利用内网穿透,比如frp,其余一种是利用异地组网办法。隧道强力推举,其次是内网穿透,异地组网本钱比较贵。
隧道连接
一样平常ssl连接做事器软件都可以方便地建立隧道,以FinalShell软件为例,
在终端设置这里配置连接做事器信息并成功连接之后,就可以直接建立隧道了,类型为远程,监听端口指的是本地须要吸收xdebug调试的端口,目标端口和目标地址针对线上的,xdebug配置信息:
xdebug.remote_host=127.0.0.1xdebug.remote_port=9000
意思是说当做事器吸收到9000端口的数据,直接转发到本地的9000端口,可以在做事器运行“netstat -ltn”命令查看端口是否正常监听。
此处须要把稳的是本地要先连接做事器,这样才能转发成功。如果线上项目是运行在docker上,xdebug.remote_host要填写宿主机的ip。
内网穿透
内网穿透须要支持tcp转发,可以利用第三方的,也可以自己搭建。
免费我这边先容飞鸽(https://www.fgnwct.com/),注册之后开通免费隧道,把稳选择tcp协议,就可以看到隧道基本信息。
个中free.vipnps.vip:39776表示当要求该地址时将数据通过tcp协议传送到本地的9000端口上,如果要配置xdebug,就配置:
xdebug.remote_host=free.vipnps.vipxdebug.remote_port=39776
然后本地运行客户端就可以进行远程调试了。
如果自己搭建内网穿透也很随意马虎,去github找frp的项目地址,下载地址为:
https://github.com/fatedier/frp/releases
根据操作系统选择编译好的文件,压缩包里面有客户端和做事真个配置文件,做事端可以放在测试做事器,也可以放在正式做事器。可以结合Supervisor运行做事端,Supervisor的配置文件参考如下:
[program:frp]command=/root/frps/frp_0.35.1_linux_amd64/frps -c frps.inidirectory=/root/frps/frp_0.35.1_linux_amd64/autorestart=truestartsecs=3startretries=3stdout_logfile=/www/server/panel/plugin/supervisor/log/frp.out.logstderr_logfile=/www/server/panel/plugin/supervisor/log/frp.err.logstdout_logfile_maxbytes=2MBstderr_logfile_maxbytes=2MBuser=rootpriority=999numprocs=1process_name=%(program_name)s_%(process_num)02d
frps.ini的配置文件可以直接用默认,有一个是bind_port的参数,这个是做事端监听frp客户真个端口,该端口须要对外开放。
本地客户端frpc.ini配置文件参考如下:
[common]server_addr=frp做事端所在ipserver_port = frps.ini的bind_port配置项,默认为7000[xdebug]type = tcplocal_ip=127.0.0.1# 本地iplocal_port=9000#本地监听端口remote_port=9000#远程做事器监听端口,远程9000端口转发到本地9000端口
xdebug配置参考如下:
xdebug.remote_host=frp做事端所在ipxdebug.remote_port=本地frpc.ini设置的remote_port端口
运行正常往后就可以远程调试了。
异地组网
异地组网我推举利用蒲公英(https://pgy.oray.com/),测试做事器或正式做事器运行客户端,本地环境再其余运行客户端,此时做事器和本地就建立了虚拟局域网,同时也分配了局域网ip,xdebug配置如下:
xdebug.remote_host=本地虚拟局域网ipxdebug.remote_port=本地xdebug监听端口,比如9000
操作步骤与内网穿透差不多,这里就不多先容了。
Xdebug配置
打开phpstorm,须要配置几个参数:
这里配置本地须要监听的端口。
这里配置xdebug配置的key、线上地址和本地监听端口。
然后在Servers配置项里设置线上地址和项目目录的映射。
配置完之后可以进行Debug配置:
如果选择PHP Remote Debug形式调试的话,可以结合xdebug helper浏览器扩展合营调试,这种相比拟PHP Web Page调试办法方便很多。
线上xdebug配置参考如下:
;开启xdebug支持远程调试xdebug.remote_enable=1;远程调试的主机,一样平常都是docker宿主机器,本地调试便是本机,ip可以通过`docker inspect 容器名得到`xdebug.remote_host=127.0.0.1;远程调试机器的端口,一样平常是9000,和后面讲到的phpStorm里面保持同等xdebug.remote_port=9000;idekey 对接调试的密钥,和后面phpStorm里面的务必保持同等xdebug.idekey=PHPSTORM;自动触发调试,可以将这个值设为1;;xdebug.remote_autostart=1;更多参数先容请拜会这里 https://xdebug.org/docs/all_settings;xdebug.remote_connect_back=1xdebug.remote_handler=dbgp;xdebug.remote_mode=req;xdebug.max_nesting_level=250;xdebug.remote_log='/www/wwwlogs/xdebug_docker.log'
总结
远程调试建议利用隧道办法,由于这种是最快的,也是最稳定的,如果项目是运行在docker上,xdebug.remote_host就不能设置127.0.0.1了,须要设置宿主机的IP,运行docker inspect命令可查看宿主机的ip。