深入理解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 setcookie() cannot modify header information 的解决方法
Jan 09 PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
php错误级别的设置方法
Jun 17 PHP
解析php开发中的中文编码问题
Aug 08 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
PHP、Java des加密解密实例
Apr 27 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
PHP中number_format()函数的用法讲解
Apr 08 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
杏林同学录(三)
2006/10/09 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
django批量导入xml数据
2016/10/16 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
客服专员岗位职责
2014/02/28 职场文书
《忆江南》教学反思
2014/04/07 职场文书
电视节目策划方案
2014/05/16 职场文书
还款承诺书范本
2015/01/20 职场文书
简爱电影观后感
2015/06/10 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书
优质服务标语口号
2015/12/26 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
家电创业计划书
2019/08/05 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
mysql如何能有效防止删库跑路
2021/10/05 MySQL