同步调试会话
在构建具有多层的 Web 应用程序时,您可以让前端 PHP 代码调用后端 PHP 代码。通常,开发人员同时在此类应用程序的两侧工作。本教程描述了从前端代码逐步进入后端代码并同时调试它们的几种方法。
在你开始前
在开始调试之前,请确保已正确安装和配置调试引擎。PhpStorm 支持使用两种最流行的工具进行调试:Xdebug和Zend Debugger。这些工具不能同时使用,因为它们相互阻挡。为避免此问题,您需要更新php.ini文件中的相应部分,如配置 Xdebug和配置 Zend Debugger中所述。
在编辑器中打开活动的php.ini文件:
在“设置/首选项”对话框 ( Ctrl+Alt+S) 中,单击PHP。
在打开的PHP页面上,单击CLI Interpreter字段
旁边的。
在打开的CLI 解释器对话框中,配置文件只读字段显示活动php.ini文件的路径。单击在编辑器中打开。
确保为辅助请求启动调试器会话
Xdebug 和 Zend Debugger 的工作方式是它们建立从 PHP 解释器到 IDE 的连接。虽然可能,但最好不要对每个发出的请求都执行此操作,而仅对需要调试的请求执行此操作。对于我们的前端脚本,我们将使用PhpStorm 小书签或浏览器调试扩展从浏览器执行此操作。
XDEBUG_SESSION_START=session_name
两个调试引擎都可以通过传入请求变量(对于 Xdebug,对于 Zend Debugger)来按需启动调试会话start_debug=1
,这是小书签和浏览器扩展所做的。但是,这只适用于我们点击的第一个脚本。考虑以下两个脚本:frontend.php和backend.php。
前端.php:
<?php $personJson = file_get_contents('http://localhost/backend.php'); $person = json_decode($personJson); var_dump($person);后端.php:
<?php 类人 { public $Name; 公共$电子邮件;} $person = 新人();$person->Name = "约翰"; $person->Email = "john.smith@company.com"; 回声 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 请求参数,然后将它们传递出去。
这应该使用与父会话名称相同的会话名称启动客户端调试会话(除非 Xdebug 使用 cookie 启动,我们回退到使用默认PHPSTORM
会话名称)。
增加同时调试器连接的数量
默认情况下,PhpStorm 一次接受一个调试器连接。这是一件好事:想象一下广泛使用 AJAX 并为每个传入的 AJAX 调用提供一个调试会话!但是,在某些情况下,允许多个连接是有意义的,例如,同时调试前端和后端。
要启用对多个调试器连接的支持,请在Settings/Preferences对话框 ( Ctrl+Alt+S) 中,转到 。在打开的Debug页面上,增加最大连接数,例如增加到3。

侦听传入的调试器连接
在 PhpStorm 中,通过单击工具栏或选择 在主菜单中 这将确保 PhpStorm 在启动调试会话时做出反应并自动打开调试工具窗口。在启动脚本之前,请确保设置了断点,或者在Settings/Preferences对话框的Debug页面上启用了Break at first line in PHP scripts选项。Ctrl+Alt+S
启动调试会话
要从浏览器启动调试会话,我们可以使用PhpStorm 小书签或浏览器调试扩展。一旦我们添加了一个断点,PhpStorm 就会通知我们有一个传入的调试器连接并暂停脚本执行。

如果我们进入file_get_contents
函数调用,PHP 将启动第二个调试器连接,这将依次在单独的选项卡中打开 PhpStorm 中的调试器。我们现在已经有效地从frontend到backend。

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

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