深入理解PHP的远程多会话调试

一、背景介绍

本文主要给大家介绍了关于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

检查是否配置正确

将远程(fpm所在主机10.99.1.185)端口9000映射到本地端口9000:

ssh -CNg -R 9000:localhost:9000 root@10.99.1.185

本地安装openssh后可以直接使用ssh命令

在服务器可以看到9000端口被ssh占用

PHPSTORM也需要配置Xdebug,配置同时启用的调试会话为多个,端口9000,接受外部请求。

配置项目相关的path mapping,域名,端口

三、跨会话(项目)调试配置

跨项目调试的核心是把触发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");

四、调试流程

  • 确保调试参数已经转发给api接口
  • 增加同时可以调试的会话数量
  • 开启调试监听,开启服务端Xdebug

五、总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

六、参考资料

https://confluence.jetbrains.com/display/PhpStorm/Simultaneous+debugging+sessions+with+PhpStorm

https://paper.seebug.org/308/

(0)

相关推荐

  • PHP远程调试之XDEBUG

    开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用xdebug来远程调试呢? 我这里使用虚拟机搭建了一个模拟环境来实验说明: 1.虚拟机IP:192.168.174.130 ,虚拟机用于搭建lampp环境 2.实体机IP:192.168.174.1,这个是IDE的开发环境. 首先我在虚拟机里面安装了一个lampp,而且增加了一vhosts,具体如下: vim /opt/lampp/etc/extra/http

  • 使用phpstorm和xdebug实现远程调试的方法

    vs的断点调试功能很强大有木有,能查看所有变量有木有.php调试很麻烦有木有,echo,var_dump写得你想吐了有木有.想体验一下ide调试的快感吗?那就来使用xdebug吧. 1.原理:xdebug是一款php调试插件,支持远程调试,就是在php文件运行的时候,能通过tcp协议,来发送调试信息到远程端口,ide在收到调试信息的时候,可以向xdebug发送单步运行,中止运行,运行等命令.这样就实现了vs那样强大的调试功能. 2.需要的东东:一款支持xdebug远程调试的ide,这里使用php

  • 解析phpstorm + xdebug 远程断点调试

    XDEBUG配置:1.安装 xdebug 略了.网上有很多资料. 重点写php.ini的配置 [XDebug] 复制代码 代码如下: zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"xdebug.default_enable = Onxdebug.collect_params = Onxdebug.remote_connect_back = On           //如果开启此,将忽略下面的 xdebug.remote_ho

  • 深入理解PHP的远程多会话调试

    一.背景介绍 本文主要给大家介绍了关于PHP远程多会话调试的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 解决什么问题:多个项目断点调试,www.mysite.com项目会调用api.mysite.com项目REST接口,在www.mysite.com项目下触发动作时,更方便的直接调试api.mysite.com项目中的接口. 适用什么场景:跨项目调试,远程调试,比简单的var_dump更方便易用. 二.远程调试配置 Nginx+PHP-fpm环境,配置php.ini

  • Windows server 2012远程桌面会话主机和远程桌面授权

    远程桌面服务是一项由若干角色服务组成的服务器角色.在 Windows Server 2012 中,远程桌面服务包含以下角色服务: Windows Server? 2012 中的"远程桌面服务"服务器角色提供了允许用户连接到虚拟机.RemoteApp程序和基于会话的计算机的技术.通过远程桌面服务,用户可以从企业网络或 Internet 访问远程连接. Windows Server 2012默认情况下,只能提供两个用户远程桌面登陆,而通过安装远程桌面服务里的远程桌面会话主机和远程桌面授权,

  • python使用PyCharm进行远程开发和调试

    背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了. 然而,在服务器系统上安装一个IDE肯定是不现实的:通过SSH远程到服务器端,采用pdb进行调试虽然可行,但是操作还是较为繁琐,而且也不够直观. 那么,是否可以将开发环境中的IDE与服务器环境相连,实现利用开发环境的IDE调试服务器环境中运行的程序呢? 答案是肯定的,这就是远程调试(Remote D

  • 使用PyCharm进行远程开发和调试的实现

    你是否经常要在Windows 7或MAC OS X上面开发Python或Web应用程序,但是它们最后需要在linux上面来运行呢? 我们经常会碰到开发时没有问题但是到了正式的Linux环境下面却出现问题.那么怎样保证开发环境跟运行环境的一致呢? 通常有两种方法解决.一种是使用PyCharm内置支持的Vagrant,这个教程可以参考Vagrant开发环境配置. 不过很遗憾的是我自己在试验过程中启动VirtualBox虚拟机时候老是报错,暂时还没解决,读者可以自己试着测试看行不行. 第二种方式就是通

  • java进行远程部署与调试及原理详解

    这篇文章主要介绍了java进行远程部署与调试及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信.此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然.

  • VScode Remote SSH通过远程编辑与调试代码

    Visual Studio Code 最新的Insider版本中加入了remote SSH功能,可以实现代码的远程调试与文件访问. 方法非常简单,这里总结记录一下. 补充说明 一个Error的解决方案,这块可以先不看 远程Debug的时候会有一个error,修改luanch.json文件即可 Console按我上面这个截图更改. 参考github issue:https://github.com/microsoft/vscode/issues/73867 懒得看ISSUE的话就按照我上面那个改就

  • pycharm远程连接服务器调试tensorflow无法加载问题

    最近打算在win系统下使用pycharm开发程序,并远程连接服务器调试程序,其中在import tensorflow时报错如图所示(在远程服务器中执行程序正常): 直观错误为: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory Failed to load the native TensorFlow runtime. 原因为无法加载libcusolver.so等,查

  • Windwos服务器远程桌面限制用户使用同一个会话的3种设置方法

    最近远程主机重装系统后,使用远程桌面出现一个问题:同一个用户先后登录远程系统,系统分配了不同会话.当系统分配不同会话时,导致你在一个远程桌面的操作都不见了.像是你运行的一些程序,虽然他们没有被系统关闭,但是你无法对他们进行管理.这就给你的管理带来极大的不便,文章将说明如何解决这个问题.这里以Windows Server 2008为例,其他系统只作参考. 如果将远程桌面会话主机服务器配置为限制用户只能进行一个会话,并且用户将该会话置于断开状态,用户下次连接到远程桌面会话主机服务器时,将自动重新连接

  • 详述IntelliJ IDEA远程调试Tomcat的方法(图文)

    在调试代码的过程中,为了更好的定位及解决问题,有时候需要我们使用远程调试的方法.在本文中,就让我们一起来看看,如何利用 IntelliJ IDEA 进行远程 Tomcat 的调试. 首先,配置remote: 如上图所示,点击Edit Configurations,进入如下界面: 如上图所示,我们进入了Run/Debug Configurations界面,然后点击左上角的+,选择Remote: 标注 1:运行远程 JVM 的命令行参数: 标注 2:传输方式,默认为Socket: 标注 3:调试模式

  • Python远程开发环境部署与调试过程图解

    这篇文章主要介绍了Python远程开发环境部署与调试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.下载相应开发工具 Pycharm :下载地址 二.部署开发机 一般在工作过程中,开发环境并不是本地环境,而是指在开发机:因为,有很多依赖本地部署非常麻烦,而开发机中则内置了很多相关的服务 三.代码自动化部署 由于我们在本地进行代码编辑.在开发机中进行代码的运行及调试,因此,需要一种很方便的方式进行代码的远程自动化部署Pycharm 基

随机推荐