深入理解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 in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
Look And Say 序列php实现代码
May 22 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
destoon之一键登录设置
Jun 21 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 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伪静态页面函数附使用方法
2008/06/20 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
javascript中的隐式调用
2018/02/10 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Python获取文件ssdeep值的方法
2014/10/05 Python
Python随机生成彩票号码的方法
2015/03/05 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
python求质数的3种方法
2018/09/28 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
学习十八大的心得体会
2014/09/01 职场文书
监考失职检讨书
2015/01/26 职场文书
工程技术员岗位职责
2015/04/11 职场文书
企业百日安全活动总结
2015/05/07 职场文书
交通安全月活动总结
2015/05/08 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
物业公司管理制度
2015/08/05 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
Python实现的扫码工具居然这么好用!
2021/06/07 Python