深入理解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 APC的安装与使用详解
Jun 13 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
php常用hash加密函数
Nov 22 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
分享10段PHP常用代码
Nov 11 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 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中一些可能会被忽略的问题
2013/06/21 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
javascript不同页面传值的改进版
2008/09/30 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
基于vue实现分页效果
2017/11/06 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
最小二乘法及其python实现详解
2020/02/24 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
struct和class的区别
2015/11/20 面试题
银行自荐信范文
2013/10/07 职场文书
优秀村官事迹材料
2014/01/10 职场文书
暑期社会实践感言
2014/02/25 职场文书
飞屋环游记观后感
2015/06/08 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
护士业务学习心得体会
2016/01/25 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书