深入理解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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
yii操作cookie实例简介
Jul 09 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
php计算函数执行时间的方法
Mar 20 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php 获取xml接口数据的处理方法
May 31 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 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
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
javascript常用对话框小集
2013/09/13 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
Python collections模块的使用方法
2020/10/09 Python
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
护士自我介绍信
2014/01/13 职场文书
生产厂长岗位职责
2014/02/21 职场文书
招股说明书范本
2014/05/06 职场文书
个人违纪检讨书
2014/09/15 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL