深入理解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&amp;mysql(六)
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 11 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 PHP
PHP7变量处理机制修改
Mar 09 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 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和ACCESS写聊天室(七)
2006/10/09 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Sea.JS知识总结
2016/05/05 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python之re操作方法(详解)
2017/06/14 Python
使用python实现tcp自动重连
2017/07/02 Python
Python 处理数据的实例详解
2017/08/10 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
解析Python的缩进规则的使用
2019/01/16 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
技能比赛获奖感言
2014/02/14 职场文书
节能减耗标语
2014/06/21 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
政风行风整改方案
2014/10/25 职场文书
会计人员岗位职责
2015/02/03 职场文书
贫困证明书范文
2015/06/16 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python