PhpStorm 2025.2 Help

同时调试会话

在构建具有多层结构的 Web 应用程序时,您可以让前端 PHP 代码调用后端 PHP 代码。 通常,开发人员会同时处理此类应用程序的两端。 本教程描述了几种从前端代码进入后端代码并同时调试它们的方法。

开始之前

PhpStorm 支持使用两种最流行的工具进行调试: XdebugZend Debugger。 这些工具不能同时使用,因为它们会相互阻碍。 为避免此问题,您需要按照 配置 Xdebug配置 Zend Debugger 中的描述更新相关 PHP 解释器的 php.ini 文件。

在编辑器中打开活动的 php.ini 文件:

  1. 设置 对话框(Ctrl+Alt+S )中,单击 PHP

  2. 在打开的 PHP 页面上,单击 “浏览”按钮 ,位于 CLI 解释器 字段旁边。

  3. 在打开的 CLI 解释器 对话框中, 配置文件 只读字段显示活动 php.ini 文件的路径。 点击 在编辑器中打开

确保为次要请求启动调试器会话

Xdebug 和 Zend Debugger 的工作方式是从 PHP 解释器到 IDE 建立连接。 虽然可以这样做,但最佳实践是不要对每个请求都这样做,而仅对需要调试的请求这样做。 对于我们的 前端 脚本,我们将使用浏览器中的 PhpStorm 书签工具浏览器调试扩展 来完成此操作。

两个调试引擎都可以通过传递请求变量(XDEBUG_SESSION_START=session_name 用于 Xdebug, start_debug=1 用于 Zend Debugger)按需启动调试会话,这正是书签工具和浏览器扩展的作用。 然而,这仅适用于我们首次运行的脚本。 请考虑以下两个脚本: frontend.php backend.php

  • frontend.php :

    <?php $personJson = file_get_contents('http://localhost/backend.php'); $person = json_decode($personJson); var_dump($person);
  • backend.php :

    <?php class Person { public $Name; public $Email; } $person = new Person(); $person->Name = "John"; $person->Email = "john.smith@company.com"; echo json_encode($person);

当第一个脚本使用 file_get_contents 调用第二个脚本时,它会启动一个单独的 HTTP 连接,该连接既不是现有调试会话的一部分,也不会启动一个新的会话。 如果我们希望 Xdebug 或 Zend Debugger 也为被调用的脚本启动调试,我们需要配置调试器始终启动调试(xdebug.remote_autostart=1 用于 Xdebug 2 或 xdebug.remote_autostart=yes 用于 Xdebug 3),或者传递请求参数。

让我们重写 frontend.php 脚本来实现这一点。 在最简单的形式中,我们可以检查是否存在 Xdebug 或 Zend Debugger 请求参数,并直接传递它们。

<?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://localhost/backend.php?' . $debuggingQuerystring); $person = json_decode($personJson); var_dump($person);

这将启动客户端调试会话,其会话名称与父会话相同(除非 Xdebug 是通过 Cookie 启动的,在这种情况下,我们会回退到使用默认的 PHPSTORM 会话名称)。

增加同时调试器连接的数量

默认情况下,PhpStorm 一次只接受一个调试器连接。 这是件好事:想象一下,广泛使用 AJAX 并为每个传入的 AJAX 调用启动一个调试会话的情况! 然而,在某些场景下,允许多个连接是有意义的,例如,同时调试前端和后端。

要启用对多个调试器连接的支持,请在 设置 对话框中(Ctrl+Alt+S ),转到 PHP | 调试。 在打开的 Debug 页面上,增加最大连接数,例如设置为 3

Ps 设置最大调试连接数

监听传入的调试器连接

在 PhpStorm 中,通过执行以下任一操作启用监听传入的调试连接:

  • 单击工具栏/状态栏上的 “开始监听 PHP 调试连接”按钮

  • 在主菜单中选择 运行 | 开始侦听PHP 调试连接

这确保了当在 Web 服务器上启动调试会话时,PhpStorm 会做出反应并自动打开 调试工具窗口。 在开始调试会话之前,请确保已设置 断点或在 Debug 对话框的 设置 页面上启用了 在PHP 脚本中的第一行中断 选项 Ctrl+Alt+S

开始调试会话

要从浏览器启动调试会话,我们可以使用 PhpStorm 书签工具浏览器调试扩展。 一旦我们 添加一个断点 ,PhpStorm 将通知我们有一个传入的调试器连接,并暂停脚本执行。

Ps 同时调试 1

如果我们进入 file_get_contents 函数调用,PHP 将启动第二个调试器连接,这将进一步在 PhpStorm 中以单独的标签页打开调试器。 我们现在已经有效地从 前端 跳转到了 后端

Ps 同时调试 2

后端 脚本返回时,调试器会从我们在 前端 脚本中离开的地方继续。

Ps 同时调试 3

同时调试 PHP 和 JavaScript

Web 应用程序通常由 PHP 和 JavaScript 代码组成:PHP 代码在服务器端运行,而 JavaScript 在浏览器中运行。 使用 PhpStorm,您可以轻松调试 PHP 代码,以检查服务器上发生的情况、修改变量等。 我们还可以通过从 IDE 启动 JavaScript 调试会话来调试在浏览器中运行的 JavaScript。 要了解如何同时调试这两个部分,请参阅 同时调试 PHP 和 JavaScript 代码 教程。

最后修改日期: 2025年 9月 26日