一文掌握PHP Xdebug 本地与远程调试(小结)


Posted in PHP onApril 23, 2019

很久没写PHP了、同样很很久没有用XDebug了,近期有个简单的场景要用到,简单记录一下关键步骤。

本地调试

本地环境:

$ php -v
PHP 7.3.4 (cli) (built: Apr 8 2019 10:21:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
  with Zend OPcache v7.3.4, Copyright (c) 1999-2018, by Zend Technologies
  with Xdebug v2.7.1, Copyright (c) 2002-2019, by Derick Rethans

环境搭建

// 安装xdebug
$ pecl install xdebug
// 配置xdebug
$ vim /usr/local/etc/php/7.3/conf.d/ext-xdebug.ini
[xdebug]
 zend_extension="xdebug.so"
 xdebug.remote_enable=On
 xdebug.remote_port=9001
 xdebug.idekey=PHPSTORM
 xdebug.remote_connect_back = 1
// 重启php服务
$ brew services restart php@7.3

IDE 配置

我是在~/Downloads/xdebug/ 目录下放了一个简单的PHP文件test.php来测试,在这个目录下用php -S 127.0.0.1:7790起了个http服务,可参考进行下述配置。

IDEA的几个配置项

一文掌握PHP Xdebug 本地与远程调试(小结)

一文掌握PHP Xdebug 本地与远程调试(小结)

一文掌握PHP Xdebug 本地与远程调试(小结)

开启监听

一文掌握PHP Xdebug 本地与远程调试(小结)

效果演示

设置之后, 在IDE里打上断点, 在浏览器打开这个链接即可开启测试

http://127.0.0.1:7790/test.php?XDEBUG_SESSION_START=PHPSTORM

效果如下:

一文掌握PHP Xdebug 本地与远程调试(小结)

浏览器没有必要安装 Xdebug Helper 插件。

远程调试

与上一篇联动, 本篇是远程调试, 主要记录一下过程

本地环境:

# php -v
PHP 7.2.16 (cli) (built: Mar 10 2019 21:22:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
  with Xdebug v2.8.0-dev, Copyright (c) 2002-2019, by Derick Rethans

环境搭建

// 如果没有安装过需要先行安装
# yum install -y php-devel gcc

// 安装xdebug
# cd /usr/local/src
# git clone https://github.com/xdebug/xdebug.git
# cd xdebug
# ./rebuild.sh
// xdebug配置文件
# vim /etc/php.d/xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=On
xdebug.remote_port=11955
xdebug.idekey=PHPSTORM
// 重启PHP服务
# systemctl restart php-fpm
# systemctl status php-fpm

然后重点来了,一定不要忘记开放上面配置的xdebug.remote_port端口号,开放此端口号、开放此端口号、开放此端口号。

开放端口每个系统都不太一样,在CentOS7中可以使用firewall-cmd来操作

# firewall-cmd --zone=public --add-port=11955/tcp --permanent
# firewall-cmd --reload

IDE 配置

IDE的配置与本地调试不太一样,总的来说有两种方式,一种是通过在IDE配置Remote Debug, 需要配置登录远端服务器;一种是通过ssh来做远程端口转发到本地来实现类似本地调试的方式。
在这里,我选用了后一种方式来操作。

远程端口转发

// HOST 为远程服务器在~/.ssh/config的配置host名, 可以替换为你的 比如 root@1.1.1.1
ssh -NT -R 11955:127.0.0.1:9001 HOST

这样就实现了远程xdebug端口11955到本地9001的映射。

IDE配置

与本地调试的配置不一样的地方就是host和port,其他地方大同小异。

IDEA-PHP-Servers的配置:

host 为远程web服务的域名, port 为远程web提供服务的端口号。

同时需要注意的是:需要勾选 path mappings, 并正确配置要debug的工程目录在远程和本地两个环境的映射关系。

一文掌握PHP Xdebug 本地与远程调试(小结)

IDEA-PHP-XDebug-DBGp-Proxy的配置:

更改hostport为远程web服务配置,与上一步相同

一文掌握PHP Xdebug 本地与远程调试(小结)

效果演示

设置之后, 在IDE里打上断点, 在浏览器打开这个链接即可开启测试

http://example.com/test.php?XDEBUG_SESSION_START=PHPSTORM

效果如下:

一文掌握PHP Xdebug 本地与远程调试(小结)

同样的,浏览器没有必要安装 Xdebug Helper 插件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php访问查询mysql数据的三种方法
Oct 09 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php json转换成数组形式代码分享
Nov 10 PHP
深入浅析php json 格式控制
Dec 24 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
php模拟post提交请求调用接口示例解析
Aug 07 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 #PHP
PHP信号处理机制的操作代码讲解
Apr 19 #PHP
CentOS7编译安装php7.1的教程详解
Apr 18 #PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 #PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 #PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 #PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 #PHP
You might like
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
python中常用检测字符串相关函数汇总
2015/04/15 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
python 读取串口数据的示例
2020/11/09 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
教师求职信范文分享
2013/12/27 职场文书
顶岗实习协议书
2015/01/29 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis