深入理解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 相关文章推荐
php防止sql注入代码实例
Dec 18 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
python中format函数如何使用
2020/06/22 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
刊首寄语大全
2014/04/11 职场文书
党员自我对照检查材料
2014/08/19 职场文书
材料物理专业求职信
2014/09/01 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
领导欢迎词范文
2015/01/26 职场文书
质量承诺书格式范文
2015/04/28 职场文书
转学证明范本
2015/06/19 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Python学习开发之图形用户界面详解
2021/08/23 Python