使用phpstorm+xdebug进行PHP远程调试
- 2019-03-24 11:48:00
- CJL 原创
- 5771
xDebug是最常见的php调试工具之一,怎么能不会用
使用场景:本机调试php web、脚本。调试远程机器上运行的php web、脚本。本机使用相对简单,对于习惯把开发环境搭建到服务器的同学当然是远程调试更方便,一次搭建开发环境、到处编码不是梦。
注意事项:现有网络教程中大都忽略了一个问题,远程服务器需要能访问到开发机,因为当服务器接收到到debug标志的请求时需要把信息发送到开发机的phpstorm中。对于有NAT的网络环境中可以通知端口映射或ssh通道的方式保证开发机和服务器之间可以正常通信。
一、服务器安装xdebug
网上可以很轻易的搜到安装教程,大体的步骤基本上就是:获取phpinfo信息,根据phpinfo信息安装php开发工具包,下载xdebug源码、编辑安装,修复php.ini文件启用xdebug。
参考这篇文章:https://www.jianshu.com/p/1b617b9066b6
1、在自己服务器上创建一个文件打印phpinfo();
2、访问并右键查看网页源码复制出来文本,粘贴到 https://xdebug.org/wizard.php
3、根据提示进行安装操作
注意:较低版本的php可能不支持,安装php 开发工具包的时候可能会有版本冲突,可以忽略,根据命令行的提示来。
关键配置:php.ini
zend_extension=xdebug_module_goes_here #扩展路径 xdebug.remote_enable=1 #允许远程调试 xdebug.remote_host=127.0.0.1 #调试机器的IP地址,都在一台机器的话填写127.0.0.1 内网互通的机器的话填写安装IDE机器的IP地址,远程不能互通的机器填写127.0.0.1 然后配置ssh通道 xdebug.remote_port=9000 #调试机器的端口 建议改成其他端口,9000默认是php-fpm的端口容易冲突
二、开发机安装phpstorm
这一步网上的教程也比较多。Windows安装参考:https://www.jianshu.com/p/b6d69d86e21a mac安装参考:https://www.jianshu.com/p/e91d895b9a46
关于破解,建议有能力的同学买正版授权,学生可以申请学生版。破解可以参考:http://idea.lanyus.com/
三、ssh通道
参考官网文档:https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html 找来找去还是phpstorm的官网文档最全,建议直接安装官网文档进行配置,看英文困难的同学可以用翻译软件翻一下,关键命令就是这个了:
ssh -R 9000:localhost:9000 username_goes_here@hostname_goes_here
对于开发机和服务器不能互通的同学这步一定要做,端口换为自己设置的端口,要与php.ini内配置的一致,后面的用户名和hostname换成自己服务器的实际用户和ip。执行成功可以在服务器上看到一个对应端口的监听。
四、phpstorm 配置
还是参考官方文档:https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html
1、设置xdebug监听端口,preference或setting内
2、添加调试配置
添加一个php web page类型的,选中server,如果没有server可供选择的话,点击后面...添加sever
添加server,配置访问域名和目录映射关系
五、开始调试
点击电话图标打开debug监听
点击小乌龟图标开始调试,会自动跳出浏览器打开页面
这时候就可以在代码中添加断点,刷新浏览器进行调试了。
debugger窗口可以看到当前的变量值,点击窗口顶部的按钮就可以进行单步调试了。
六、多人调试
参考官网文档:https://www.jetbrains.com/help/phpstorm/multiuser-debugging-via-xdebug-proxies.html
重点是在大家都可以访问的局域网内搭建一个proxy
总结:1、注意要开启ssh通道保证开发机与服务器可以双向通信
2、server配置要设置目录映射,如果配置有问题调试的时候console窗口会提示无法找到对应文件
3、可以通过Settings/Preferences->Languages & Frameworks->PHP->Debug 窗口内的validate进行服务器安装请求检验,
检查结果会提示有哪些问题需要去解决,如果使用的ssh通道并且是127.0.0.1 可以忽略remote_host 的错误提示,
最后,开心的写BUG去吧