深入理解PHP的远程多会话调试


Posted in PHP onSeptember 21, 2017

一、背景介绍

本文主要给大家介绍了关于PHP远程多会话调试的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

解决什么问题:多个项目断点调试,www.mysite.com项目会调用api.mysite.com项目REST接口,在www.mysite.com项目下触发动作时,更方便的直接调试api.mysite.com项目中的接口。

适用什么场景:跨项目调试,远程调试,比简单的var_dump更方便易用。

二、远程调试配置

Nginx+PHP-fpm环境,配置php.ini拓展

[Xdebug]
zend_extension = /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable=1
remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=XDEBUG

注意:CLI环境的php与fpm的php是否使用的不同php.ini配置文件,需要配置fpm对应的php.ini

检查是否配置正确

深入理解PHP的远程多会话调试

将远程(fpm所在主机10.99.1.185)端口9000映射到本地端口9000:

ssh -CNg -R 9000:localhost:9000 root@10.99.1.185

本地安装openssh后可以直接使用ssh命令

深入理解PHP的远程多会话调试

在服务器可以看到9000端口被ssh占用

深入理解PHP的远程多会话调试

PHPSTORM也需要配置Xdebug,配置同时启用的调试会话为多个,端口9000,接受外部请求。

深入理解PHP的远程多会话调试

深入理解PHP的远程多会话调试

配置项目相关的path mapping,域名,端口

深入理解PHP的远程多会话调试

三、跨会话(项目)调试配置

跨项目调试的核心是把触发Xdebug调试的条件作为参数发送给api.mysite.com项目或者后续的其他项目。

www项目代码如下:

frontend.php

<?php

$personJson = file_get_contents('http://api.mysite.com/backend.php');

$person = json_decode($personJson);

var_dump($person);

api项目代码如下:

backend.php

<?php

class Person {

public $Name;

public $Email;

}

$person = new Person();

$person->Name = "Maarten";

$person->Email = "maarten.balliauw@jetbrains.com";

echo json_encode($person);

需要修改www项目,把xdebug所需要的触发远程调试的网络请求参数加上:

<?php

$debuggingQuerystring = '';

if (isset($_GET['XDEBUG_SESSION_START'])) { // xdebug

$debuggingQuerystring = 'XDEBUG_SESSION_START=' . $_GET['XDEBUG_SESSION_START'];

}

if (isset($_COOKIE['XDEBUG_SESSION'])) { // xdebug (cookie)

$debuggingQuerystring = 'XDEBUG_SESSION_START=PHPSTORM';

}

if (isset($_GET['start_debug'])) { // zend debugger

$debuggingQuerystring = 'start_debug=' . $_GET['start_debug'];

}

$personJson = file_get_contents('http://api.mysite.com/backend.php?'
. $debuggingQuerystring);

$person = json_decode($personJson);

var_dump($person);

自有项目可以在通用的网络请求封装类中增加cookie参数:

curl_setopt($this->ch, CURLOPT_COOKIE, "XDEBUG_SESSION=XDEBUG");

深入理解PHP的远程多会话调试

四、调试流程

深入理解PHP的远程多会话调试

  • 确保调试参数已经转发给api接口
  • 增加同时可以调试的会话数量
  • 开启调试监听,开启服务端Xdebug

五、总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

六、参考资料

https://confluence.jetbrains.com/display/PhpStorm/Simultaneous+debugging+sessions+with+PhpStorm

https://paper.seebug.org/308/

PHP 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php获取系统变量方法小结
May 29 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
php ajax实现文件上传进度条
Mar 29 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 #PHP
简单实现php上传文件功能
Sep 21 #PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 #PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 #PHP
基于Laravel实现的用户动态模块开发
Sep 21 #PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 #PHP
PHP判断json格式是否正确的实现代码
Sep 20 #PHP
You might like
PHP查询快递信息的方法
2015/03/07 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
js arguments.callee的应用代码
2009/05/07 Javascript
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
Python高效编程技巧
2013/01/07 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
pandas删除指定行详解
2019/04/04 Python
python中time库的实例使用方法
2019/10/31 Python
Python笔记之观察者模式
2019/11/20 Python
如何使用Python调整图像大小
2020/09/26 Python
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
秘书岗位职责
2013/11/18 职场文书
医院护士的求职信
2014/01/03 职场文书
客服部班长工作责任制
2014/02/25 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android