调试 PHP CLI 脚本
PHP 应用程序并不总是 Web 应用程序。各种命令行工具、守护进程、消息队列处理应用程序和其他类型的应用程序通常在 PHP CLI 中运行。有几种方法可以启动 PHP CLI 调试会话。您可以从 PhpStorm 中启动它并使其启动脚本并将调试器附加到它。或者,您可以让 PhpStorm 侦听传入的调试器连接并在 IDE 外部启动脚本。我们将看看这两个选项。
在开始调试之前,请确保已正确安装和配置调试引擎。PhpStorm 支持使用两种最流行的工具进行调试:Xdebug和Zend Debugger。这些工具不能同时使用,因为它们相互阻挡。为避免此问题,您需要更新php.ini文件中的相应部分,如配置 Xdebug和配置 Zend Debugger中所述。
在编辑器中打开活动的php.ini文件:
在“设置/首选项”对话框 ( Ctrl+Alt+S) 中,单击PHP。
在打开的PHP页面上,单击CLI Interpreter字段旁边的。
在打开的CLI 解释器对话框中,配置文件只读字段显示活动php.ini文件的路径。单击在编辑器中打开。
从 PhpStorm 启动调试会话
要从 PhpStorm 中开始调试 PHP CLI 脚本,请执行以下步骤。
创建运行/调试配置
PhpStorm 使用运行/调试配置从 IDE 中执行脚本。配置可以为 PHP 解释器定义额外的参数,以及在启动我们的脚本之前启动其他命令。我们需要一个运行/调试配置来从 PhpStorm 中启动调试器。
手动为 PHP 脚本创建运行/调试配置
创建一个新的运行/调试配置。 菜单。
添加PHP Script类型的新配置并提供所需的参数,例如要执行的脚本。
保存创建的运行/调试配置。
启动调试器
在启动调试器之前,请确保设置了断点,或者在Settings/Preferences对话框的Debug页面上启用了Break at first line in PHP scripts选项。Ctrl+Alt+S
单击PhpStorm 工具栏。
按Alt+Shift+F9。
选择
从主菜单
从命令行启动调试会话
在运行 CLI 脚本时使用 PhpStorm 启动调试会话之前,请确保满足以下任何要求:
Xdebug 的
remote_autostart
(对于 Xdebug 2)或start_with_request
(对于 Xdebug 3)选项被启用。XDEBUG_CONFIG
环境变量存在。
侦听传入的调试器连接
在 PhpStorm 中,通过单击工具栏或选择调试工具窗口。在启动脚本之前,请确保设置了断点,或者在Settings/Preferences对话框的Debug页面上启用了Break at first line in PHP scripts选项。Ctrl+Alt+S
。这将确保 PhpStorm 在启动调试会话时做出反应并自动打开使用调试器选项启动脚本
由于我们将从命令行启动脚本,因此我们必须确保它以启用调试器所需的设置启动。
使用 Xdebug 启动脚本
Xdebug 有各种配置选项,我们可以使用这些选项让 PHP 解释器访问 PhpStorm。这些参数必须使用-d
命令行参数传递给 PHP 解释器。或者,您可以设置一个环境变量,这样您就不需要-d
每次都提供参数。
使用 PHP 命令行开关启动脚本并进行调试
使用以下命令行选项启动 PHP:
php -dxdebug.mode=debug -dxdebug.client_host=127.0.0.1 -dxdebug.client_port=9003 -dxdebug.start_with_request=yes path/to/script.phpphp -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php
使用环境变量启动脚本并进行调试
设置一个配置 Xdebug 的环境变量:
对于 Windows:
设置 XDEBUG_MODE=debug& 设置 XDEBUG_SESSION=1设置 XDEBUG_CONFIG=remote_enable=1 remote_mode=req remote_host=127.0.0.1 remote_port=9000 remote_connect_back=0适用于 macOS / Linux
导出 XDEBUG_MODE=调试 XDEBUG_SESSION=1导出 XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_host=127.0.0.1 remote_port=9000 remote_connect_back=0"
正常启动脚本:
php 路径/到/script.php或者,您可以使用 Xdebug 的remote_autostart(对于 Xdebug 2)或start_with_request(对于 Xdebug 3)设置来始终为每个运行的脚本启动调试会话。
使用 Zend Debugger 启动脚本
Zend Debugger 有各种配置选项,我们可以使用这些选项让 PHP 解释器访问 PhpStorm。这些参数必须使用环境变量传递给 PHP 解释器。
使用调试启动脚本
设置
QUERY_STRING
环境变量:设置 QUERY_STRING=start_debug=1&debug_host=127.0.0.1&no_remote=1&debug_port=10137&debug_stop=1export QUERY_STRING="start_debug=1&debug_host=127.0.0.1&no_remote=1&debug_port=10137&debug_stop=1"正常启动脚本:
php 路径/到/script.php
可选地,为了告诉 PhpStorm 应该使用哪个路径映射配置来从某个机器进行连接,PHP_IDE_CONFIG
环境变量的值应该设置为serverName=SomeName
,其中SomeName
是设置/首选项对话框 ( Ctrl+Alt+S)的 页面。
如果未设置此环境变量,一旦 IDE 检测到传入的 Xdebug 连接,系统将提示您手动指定路径映射。
调试
一旦脚本启动,PhpStorm 将打开调试工具窗口并在脚本中设置的第一个断点处中断。您现在可以继续调试 PHP CLI 脚本,如检查挂起的程序中所述。
如果正在调试的脚本不是在 PhpStorm 中打开的项目的一部分,IDE 仍将在编辑器中打开脚本并在第一条语句处暂停执行。这使得快速调试任何 PHP CLI 脚本成为可能,即使还没有 PhpStorm 项目。