深入理解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读MYSQL中文乱码的解决方法
Dec 17 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
php生成excel文件的简单方法
Feb 08 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
phpinfo无法显示的原因及解决办法
Feb 15 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基础知识:控制结构
2006/12/13 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
vue中导出Excel表格的实现代码
2018/10/18 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python中顺序表的实现简单代码分享
2018/01/09 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python实现图片识别加翻译功能
2019/12/26 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Python图像读写方法对比
2020/11/16 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
幼儿园大班毕业感言
2014/02/06 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
骨干教师培训方案
2014/05/06 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Python OpenGL基本配置方式
2022/05/20 Python