深入理解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 相关文章推荐
文件上传类
Oct 09 PHP
PHP 彩色文字实现代码
Jun 29 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
php页面防重复提交方法总结
Nov 25 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 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 实现explort() 功能的详解
2013/06/20 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
一起来写段JS drag拖动代码
2010/12/09 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python科学计算之NumPy入门教程
2017/01/15 Python
Python自动发邮件脚本
2017/03/31 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
通过Pandas读取大文件的实例
2018/06/07 Python
python利用微信公众号实现报警功能
2018/06/10 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
保险专业大专生求职信
2013/10/26 职场文书
劳资专员岗位职责
2013/12/27 职场文书
终止合同协议书
2014/04/17 职场文书
内乡县衙导游词
2015/02/05 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python