深入理解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 Undefined index的问题
Jun 01 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
CodeIgniter常用知识点小结
May 26 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
php时间戳转换代码详解
Aug 04 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 PHP
详解Laravel制作API接口
May 31 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/24 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python 图片验证码代码
2008/12/07 Python
Python实现的石头剪子布代码分享
2014/08/22 Python
Python3实现生成随机密码的方法
2014/08/23 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
大学同学聚会邀请函
2014/01/29 职场文书
四风存在的原因分析
2014/02/11 职场文书
公务员检讨书
2014/11/01 职场文书
代理词怎么写
2015/05/25 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript