深入理解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中实现进程间通讯
Oct 09 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
PHP远程采集图片详细教程
Jul 01 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
PHP isset()及empty()用法区别详解
Aug 29 PHP
php使用event扩展的io复用测试的示例
Oct 20 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
轻松修复Discuz!数据库
2008/05/03 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php比较相似字符串的方法
2015/06/05 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
php限制文件下载速度的代码
2015/10/20 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
Smarty模板配置实例简析
2019/07/20 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
Node中使用ES6语法的基础教程
2018/01/05 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
Python操作SQLite数据库的方法详解
2017/06/16 Python
python opencv实现图像边缘检测
2019/04/29 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
python logging模块的使用
2020/09/07 Python
监理资料员岗位职责
2014/01/03 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
保密工作目标责任书
2014/07/28 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
年终工作总结范文2014
2014/11/27 职场文书
红色革命电影观后感
2015/06/18 职场文书
初三毕业感言
2015/07/31 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers