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.机器环境:

  1. 本地开发机windows,只安装了phpstorm。
    注意,我本地开发机并没有安装php.exe等其他任何开发工具。
  2. 测试服务器linux, IP为172.16.249.179, 安装了php 5.6.0,安装目录在 /opt/remi/php56/root
    服务器也安装了php-fpm/nginx等所有开发依赖环境。
  3. 此处假设访问域名为 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远程调试相关推荐

  1. php xdebug远程调试配置(含cli模式)

    找了很久php的xdebug扩展远程调试教程,大都已经过时,现在记录下php配置xdebug远程调试的过程. 适用php版本: php 7 ~ 8 适用安装xdebug3 版本 目录 1. 安装xde ...

  2. VSCode XDebug 远程调试虚拟机CentOS7上PHP项目

    声明 以下[参考]链接,如有侵权,请联系删除,在此先感谢在网络上无私奉献的人们~ 如有错误,请联系更正 文章目录 声明 背景 本机配置 虚拟机配置 1. 设置代码文件共享 2. 修改xdebug配置 ...

  3. NetBeans配置Xdebug 远程调试PHP

    很多PHP程序员使用echo,dump等比较原始的方法调试,这是非常落后的. 几年前本人写过一篇: NetBeans配置Xdebug 由于那篇文档还需要引用本人写的其他文档,感觉有些分散,所以这里重新 ...

  4. phpstorm+xdebug远程调试

    远端:centos7 phpstorm在windows上. centos7上同上一篇文章, [xdebug] zend_extension="xdebug.so" xdebug.r ...

  5. php linux 调试工具,内网Visual Studio Code通过XDebug远程调试linux服务器PHP脚本

    开发环境是这样:一台位于内网环境下的Windows机器使用VSCode作为IDE编写 { "version": "0.2.0", "configura ...

  6. xdebug 远程调试

    ---------------------------------------------------- 下面的链接下载对应版本的xdebug. https://xdebug.org/download ...

  7. 在主机中通过xdebug远程调试Vagrant虚拟机中drush脚本的方法

    改方法是调试drush所执行的php代码的方法,同样适用于普通的cli方式运行的php程序的调试. 1.首先需要调整cli方式的xdebug.ini配置: sudo vi /etc/php5/cli/ ...

  8. 开发机多用户 xdebug 远程调试 PhpStorm

    在公司都用的远程开发机开发,每次有错误调试就得dd(xxx)然后保存真是,让我在本地开发用惯xdebug的情何以堪,所以有了下文. 1.安装配置xdebug 直接使用pecl安装即可 # pecl i ...

  9. 【转】PHP远程调试之XDEBUG

    开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用xdebug来远程调试呢? 我这里使用虚拟机搭建了一个模拟环境 ...

最新文章

  1. 两台linux服务器负载均衡代码实现,nginx实现负载均衡,nginx负载均衡确保两台服务器数据保...
  2. 复制vmware overLay网络无法ping通 ping www.baidu.com可以
  3. python 字典添加元素乱序了_Python有序字典的两个小“惊喜”
  4. Lua和C的交互说明(函数)
  5. python 人脸检测_借助摄像头在Python中实现人脸检测
  6. 免费python课程排行榜-Python基础练习(一)中国大学定向排名爬取
  7. selenium课程笔记2--selenium操作chrome浏览器
  8. java什么是构造方法
  9. robotframework-selenium2library-导入可选参数
  10. 计算空间点到直线的距离
  11. ubuntu下类似IP Scan扫描同一局域网的IP
  12. TortoiseSVN右键没有菜单
  13. Java实现简易联网坦克对战小游戏
  14. 用图形编程编写国际象棋游戏
  15. c语言编程入门ppt教程下载,c语言编程入门教程教本精简版.ppt
  16. 人工智能之殇——AI项目为何屡战屡败?
  17. lm3s811 学习笔记(三)【uart】
  18. 运行Django项目报错解决,OSError: [WinError 123] 文件名、目录名或卷标语法不正确。
  19. SQL Inject
  20. JavaWeb学习之BS/CS架构及tomcat容器项目部署

热门文章

  1. ABAP动态生成经典应用之Dynamic SQL Excute 程序
  2. 财经法规2013江苏模拟题
  3. 中国银行业100强发布,头部名企为何选择永洪科技?
  4. 从卖冰箱到卖年夜饭,看海尔智家生态品牌新成果
  5. 从美图、4399生根,到趣店、瑞幸落户,厦门离中国的西雅图还有多远?
  6. 超百家金融机构争相出席,只因飞贷宣布输出全球领先的移动信贷整体技术
  7. java用递归删除文件夹_Java中通过递归调用删除文件夹下所有文件
  8. linux socket原理,socket 的工作原理
  9. java 泛型集合应用_Java泛型集合的应用和方法
  10. Python怎么安装第三方库-numpy-libnum等; (详细版)