深入理解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.MVC的模板标签系统(一)
Sep 05 PHP
扩展你的 PHP 之入门篇
Dec 04 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
php数组的一些常见操作汇总
Jul 17 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
php格式化时间戳
Dec 17 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
php微信开发之图片回复功能
Jun 14 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
javascript常用函数(1)
2015/11/04 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
django-csrf使用和禁用方式
2020/03/13 Python
关于Django Models CharField 参数说明
2020/03/31 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
农救科工作职责
2013/11/27 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
房屋出租协议书
2014/04/10 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
nginx rewrite功能使用场景分析
2022/05/30 Servers