深入理解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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
PHP解决高并发问题
Apr 01 PHP
一文搞懂PHP中的抽象类和接口
May 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的一些小问题
2010/07/03 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
javascript event 事件解析
2011/01/31 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python得到单词模式的示例
2018/10/15 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Python socket处理client连接过程解析
2020/03/18 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
Linux的主要特性
2014/10/06 面试题
竞选班长自荐书范文
2014/03/09 职场文书
出纳试用期自我评价
2015/03/10 职场文书
自荐信模板大全
2015/03/27 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python
php png失真的原因及解决办法
2021/11/17 PHP
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis