深入理解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 ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHP加密解密字符串汇总
Apr 26 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
php利用array_search与array_column实现二维数组查找
Jul 08 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
在laravel框架中实现封装公共方法全局调用
Oct 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
PHP4.04简明安装
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
wxPython的安装与使用教程
2018/08/31 Python
Python检查ping终端的方法
2019/01/26 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Python中and和or如何使用
2020/05/28 Python
python利用opencv保存、播放视频
2020/11/02 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
邓小平理论心得体会
2014/09/09 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server