深入理解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;java(三)
Oct 09 PHP
php 全文搜索和替换的实现代码
Jul 29 PHP
php fckeditor 调用的函数
Jun 21 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 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
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
php数据访问之查询关键字
2016/05/09 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
MySQL最常见的操作语句小结
2015/05/07 Python
Python切片操作实例分析
2018/03/16 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
一些Solaris面试题
2015/12/22 面试题
班级入场式解说词
2014/02/01 职场文书
学校卫生检查制度
2014/02/03 职场文书
信息技术教学反思
2014/02/12 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
会计专业求职信范文
2014/03/16 职场文书
医德医风自我评价
2014/09/19 职场文书
公司管理制度范本
2015/08/03 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python