在PHPStorm中调试PHP命令行脚本

26

我使用PHPStorm作为我的主要PHP调试工具,非常满意。到目前为止,我一直使用Firefox来运行脚本,而PHPStorm能完美捕捉断点。

现在,我遇到了一个新情况,我需要通过命令行(而不是浏览器)运行PHP脚本,并想知道是否有方法设置PHPStorm在通过命令行运行PHP脚本时能够捕捉断点?


3
请参考下面Venkat的回答,其中提供了简单的解决方案。目前被接受的答案已过时。 - J.D.
7个回答

63

使用Phpstorm在shell/command line上启用Xdebug进行PHP调试非常容易:

export XDEBUG_CONFIG="idekey=PHPSTORM"

在Windows命令行界面中,使用set代替export。

set XDEBUG_CONFIG="idekey=PHPSTORM"

确保Phpstorm正在监听PHP调试连接。

要从命令行端禁用调试:

unset XDEBUG_CONFIG

这是Phpstorm IDE-Key的默认值(PHPSTORM)。


1
在Windows CLI中使用set XDEBUG_CONFIG="idekey=PHPSTORM" - Jan.J
我不明白,PHPStorm不允许我在命令行工具控制台中运行“set”,'无法运行程序“set”(在目录“blah/blah/blah/”中):CreateProcess错误=2,系统找不到指定的文件',如果我在CMD中运行它,然后运行脚本...它不会在断点处中断(我让PHPStorm监听连接)。 - Arth

14

关注/投票相关的PhpStorm问题。

目前配置有些复杂。应该可以像Zend KB中描述的那样,通过在PhpStorm中模拟服务器和配置Php Remote Debug来进行调试。请注意,此教程存在一个错误,在Windows上需要设置QUERY_STRING如下:

SET "QUERY_STRING=start_debug=1&debug_port=10137&debug_host=127.0.0.1&debug_stop=1&no_remote=1&debug_session_id=10000"

(请注意引用方式的不同,这很重要)。

按照屏幕截图中所示设置 PhpStorm:

虚假服务器

远程调试

在主工具栏上单击Debug按钮。PhpStorm将开始监听调试器连接。

在命令行中运行您的脚本:

d:\dev\zend\ZendServer\bin\php.exe d:\work\attaches\sample\helps.php

PhpStorm将会触发断点:

breakpoint hit

这在Windows上使用Zend Server安装测试过,但在其他系统和xdebug中应该类似。

如果你想直接从PhpStorm进行调试,请使用Php Script的运行/调试配置类型。为此项目配置的PHP实例必须在配置文件中启用Zend DebuggerXdebug

PHP主目录和调试器模式可以在文件|设置|PHP中指定。

我刚在Zend Server安装(PHP主目录:d:\dev\zend\ZendServer\bin)和Zend Debugger中进行了验证,我的测试完全正常。


非常感谢!使用 Php Script 的运行/调试配置类型是一个可接受的解决方法——我已经尝试过并且成功了。然而,这不是最理想的,因为我必须为每个我想在第三方外部工具上运行的脚本设置一个配置。如果我能够使用 external tool 机制并让 PHPStorm 捕捉到断点就好了……但我想我必须等待! - JoshuaDavid
我已经更新了我的回复,加入了纯远程配置指南。之前由于Zend KB文章中引用不正确,导致无法正常工作。 - CrazyCoder
谢谢!“虚拟”方法非常棒,而且对于我运行外部工具的需求来说非常通用。 - JoshuaDavid
5
这里是一个用于运行XDEBUG的样例环境设置,我已经成功地使用了它:

set "XDEBUG_CONFIG=idekey=PHPSTORM_XDEBUG remote_enable=1 remote_host=127.0.0.1 remote_port=9000 remote_handler=dbgp remote_mode=req"

注意,引用似乎是敏感的。
- JoshuaDavid
1
上述问题已于2011年7月得到解决。正确答案在Venkat的回答中。 - J.D.

5
  1. 点击“运行”。
  2. 点击“编辑配置”...
  3. 点击绿色的“+”。
  4. 选择“PHP脚本”。
  5. 在“名称”字段中提供一个名称。
  6. 在“文件”字段中提供您的脚本的完整路径。
  7. 点击“确定”。
  8. 在下拉菜单中选择您刚刚配置的脚本:

PhpStorm 菜单栏截图

  1. 点击运行或调试按钮。您的脚本应该运行,并且它应该捕获任何设置的断点。

如果您运行脚本,可以在此处查看输出:

运行小部件的屏幕截图,通常停靠在窗口底部

如果您调试脚本,则可以在此处查看输出:

控制台小部件的屏幕截图,停靠在调试小部件中


2

对我来说,这些建议都没有起作用。

如果你处于同样的情况,请尝试以下命令(检查正确的PHP解释器路径):

/usr/bin/php -dzend_extension=xdebug.so -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_autostart=1 [PHP_SCRIPT]

2

检查环境变量SERVER_NAMESERVER_PORT是否设置。PHPStorm需要它们来进行正确的映射。可以在bash中使用export命令或在php脚本中手动设置它们。在这两种情况下,PHPStorm都可以正确地在$_SERVER['SERVER_NAME']$_SERVER['SERVER_PORT']下找到它。


这个映射对我来说解决了问题,谢谢!虽然只有在 bash 中导出变量时才起作用,将它们设置在 PHP 脚本中并不起作用。 - Alex

1
我(在MacOS上)是这样实现的: export XDEBUG_CONFIG="idekey=12345"

0

在 MacOS 上,我使用了不同的 bash_profile。我需要首先运行以下命令:

source ~/.bash_profile

这将我的php从内置的/usr/bin/php更改为通过XAMPP安装的版本。在上述命令后,PHPStorm的XDebug开始工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接