php项目使用xdebug远程调试
0. 目的、原理和调用流程
访问测试环境的页面,在本地开发机打断点调试。相当流弊的功能,方便代码排查原因。
原理:
运行xdebug需要客户端IDE(phpstorm)、远程服务器配合,首先是客户端配置好端口,发送debug请求,请求会通过浏览器或者IDE的http请求,携带特定的参数发送到服务端,服务端收到请求后,发现这是一个xdebug请求,则与IDE建立dpgp连接,当遇到断点时候,返回调试信息给IDE
- 服务器的IP是10.0.1.2,端口80上有HTTP
- IDE位于未知IP上,因此xdebug.remote_connect_back设置为1
- IDE侦听端口9000,因此xdebug.remote_port设置为9000
- 发出HTTP请求,Xdebug从HTTP头中检测IP地址
- Xdebug连接到端口9000上检测到的IP(10.0.1.42)
- 调试运行,提供HTTP响应
调用流程:
以上内容摘自storyflow的博客,感谢原作者。
好的,搞清楚原理之后,把上面的Ip、端口号这些统统忘记,以免跟下面演示的IP、端口搞混。 (搞不清楚就算了,反正也要忘记 ^ _ ^ )
现在 我们正式开始一段愉快的学习之旅吧。
1.机器环境:
- 本地开发机windows,只安装了phpstorm。
注意,我本地开发机并没有安装php.exe等其他任何开发工具。 - 测试服务器linux, IP为
172.16.249.179
, 安装了php 5.6.0,安装目录在/opt/remi/php56/root
,
服务器也安装了php-fpm/nginx等所有开发依赖环境。 - 此处假设访问域名为
http://test.php.com
, 程序已部署到测试服,项目能正常访问。
2.Linux服务器安装xdebug扩展
2.1.下载对应版本的xdebug扩展包
- 最新版本下载地址:
https://xdebug.org/download.php
- 历史版本下载地址:
https://xdebug.org/download/historical
我下载的是xdebug-2.5.4.tgz
这个版本。
2.2.xdebug-2.5.4.tgz
上传到服务器的/opt
目录下,解压并进入目录:
tar-zxvf xdebug-2.5.4-tgz
cd /opt/xdebug-2.5.4
2.3.执行php安装扩展包的命令
注意:执行此命令的时候,/phpize前面的路径得替换为你机器上的php真实安装路径。
/opt/remi/php56/root/bin/phpize
我在执行此命令后报错,原因是没有安装php-devel开发工具:
于是先安装php-dev工具:
#列出安装包的所有版本
yum list | grep php-devel
#找到对应版本的安装包,执行安装
yum install php56-php-devel.x86_64
操作过程如下图:
2.4.重新执行命令
注意:执行此命令的时候,/phpize前面的路径得替换为你机器上的php真实安装路径。
/opt/remi/php56/root/bin/phpize
2.5. 编译xdebug扩展包
注意:执行此命令的时候,/php-config前面的路径得替换为你机器上的php真实安装路径。
./configure --enable-xdebug --with-php-config=/opt/remi/php56/root/bin/php-config
执行成功,再执行:
make && make install
2.6. 安装成功后,去php modules路径下看看,是否有xdebug.so文件:
3. Linux服务器配置php.ini
3.1. 在php.ini文件中追加参数:
注意:xdebug.remote_port端口号为9009,是指你本地开发机的监听端口号,当然也可以改为其他端口号。
zend_extension="xdebug.so"
xdebug.remote_enable=On
#本地开发机端口,测试服务器会讲debug信息发送到此端口
xdebug.remote_port=9009
xdebug.idekey=PHPSTORM
#如果开启此remote_connect_back,则忽略xdebug.remote_host的参数
xdebug.remote_connect_back = 1
xdebug.remote_handler = dbgp
xdebug.auto_trace = 1
xdebug.remote_log = /tmp/xdebug.log
3.2. 配置转发端口9009
因为debug session通讯数据是从linux服务器发送到你本地开发机,所以需要配置ssh转发通道(ssh tunnel)
ssh工具我用的是MobaXterm软件,转发通道配置如下图,你也可以使用CRT, xshell等其他工具,原理是相同的。
sshCRT配置大概是这样的:
- 远程主机上键入telnet命令
telnet 127.0.0.1 9009
检查是否能够访问9009 端口。 - 如果有端口冲突可以调整。
- 如果启动了防火墙
firewall-cmd --state
,记得开放此端口。
4.本地开发机phpStorm配置
4.1. phpStorm debug配置端口
4.2. dbgp proxy配置
4.3. servers配置映射路径path mappings
4.4. 开启、关闭监听
5. chrome浏览器安装xdebug-helper插件
5.1. 扩展包下载
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
5.2. 启动xdebug
安装后你可能需要重启浏览器,此插件才能正常运行。
虫子为绿色即为运行中:
此插件的作用是在cookie中设值:
6. 打断点调试
在登录方法打断点,浏览器访问http://test.php.com
,可以进入断点:
6.postman设置cookie方式
如果只是通过postman方式调用接口,则需要在postman的cookie中,先添加域名:
然后在对应域名下添加cookie: XDEBUG_SESSION=PHPSTORM;
主要参考资料:
https://segmentfault.com/a/1190000016366104
https://juejin.cn/post/6844903728193994766
https://www.cnblogs.com/ding-daisy/p/10142023.html
php项目使用xdebug远程调试相关推荐
- php xdebug远程调试配置(含cli模式)
找了很久php的xdebug扩展远程调试教程,大都已经过时,现在记录下php配置xdebug远程调试的过程. 适用php版本: php 7 ~ 8 适用安装xdebug3 版本 目录 1. 安装xde ...
- VSCode XDebug 远程调试虚拟机CentOS7上PHP项目
声明 以下[参考]链接,如有侵权,请联系删除,在此先感谢在网络上无私奉献的人们~ 如有错误,请联系更正 文章目录 声明 背景 本机配置 虚拟机配置 1. 设置代码文件共享 2. 修改xdebug配置 ...
- NetBeans配置Xdebug 远程调试PHP
很多PHP程序员使用echo,dump等比较原始的方法调试,这是非常落后的. 几年前本人写过一篇: NetBeans配置Xdebug 由于那篇文档还需要引用本人写的其他文档,感觉有些分散,所以这里重新 ...
- phpstorm+xdebug远程调试
远端:centos7 phpstorm在windows上. centos7上同上一篇文章, [xdebug] zend_extension="xdebug.so" xdebug.r ...
- php linux 调试工具,内网Visual Studio Code通过XDebug远程调试linux服务器PHP脚本
开发环境是这样:一台位于内网环境下的Windows机器使用VSCode作为IDE编写 { "version": "0.2.0", "configura ...
- xdebug 远程调试
---------------------------------------------------- 下面的链接下载对应版本的xdebug. https://xdebug.org/download ...
- 在主机中通过xdebug远程调试Vagrant虚拟机中drush脚本的方法
改方法是调试drush所执行的php代码的方法,同样适用于普通的cli方式运行的php程序的调试. 1.首先需要调整cli方式的xdebug.ini配置: sudo vi /etc/php5/cli/ ...
- 开发机多用户 xdebug 远程调试 PhpStorm
在公司都用的远程开发机开发,每次有错误调试就得dd(xxx)然后保存真是,让我在本地开发用惯xdebug的情何以堪,所以有了下文. 1.安装配置xdebug 直接使用pecl安装即可 # pecl i ...
- 【转】PHP远程调试之XDEBUG
开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用xdebug来远程调试呢? 我这里使用虚拟机搭建了一个模拟环境 ...
最新文章
- 两台linux服务器负载均衡代码实现,nginx实现负载均衡,nginx负载均衡确保两台服务器数据保...
- 复制vmware overLay网络无法ping通 ping www.baidu.com可以
- python 字典添加元素乱序了_Python有序字典的两个小“惊喜”
- Lua和C的交互说明(函数)
- python 人脸检测_借助摄像头在Python中实现人脸检测
- 免费python课程排行榜-Python基础练习(一)中国大学定向排名爬取
- selenium课程笔记2--selenium操作chrome浏览器
- java什么是构造方法
- robotframework-selenium2library-导入可选参数
- 计算空间点到直线的距离
- ubuntu下类似IP Scan扫描同一局域网的IP
- TortoiseSVN右键没有菜单
- Java实现简易联网坦克对战小游戏
- 用图形编程编写国际象棋游戏
- c语言编程入门ppt教程下载,c语言编程入门教程教本精简版.ppt
- 人工智能之殇——AI项目为何屡战屡败?
- lm3s811 学习笔记(三)【uart】
- 运行Django项目报错解决,OSError: [WinError 123] 文件名、目录名或卷标语法不正确。
- SQL Inject
- JavaWeb学习之BS/CS架构及tomcat容器项目部署
热门文章
- ABAP动态生成经典应用之Dynamic SQL Excute 程序
- 财经法规2013江苏模拟题
- 中国银行业100强发布,头部名企为何选择永洪科技?
- 从卖冰箱到卖年夜饭,看海尔智家生态品牌新成果
- 从美图、4399生根,到趣店、瑞幸落户,厦门离中国的西雅图还有多远?
- 超百家金融机构争相出席,只因飞贷宣布输出全球领先的移动信贷整体技术
- java用递归删除文件夹_Java中通过递归调用删除文件夹下所有文件
- linux socket原理,socket 的工作原理
- java 泛型集合应用_Java泛型集合的应用和方法
- Python怎么安装第三方库-numpy-libnum等; (详细版)