如何为命令行PHP脚本触发XDebug探查器?

时间:2010-02-18 12:40:14

标签: php configuration command-line profiling xdebug

XDebug提供配置指令“xdebug.profiler_enable_trigger”,允许通过在通过HTTP调用脚本时传递GET或POST参数“XDEBUG_PROFILE”来激活分析。如果您不希望对所有脚本进行性能分析,但仅针对少数特殊情况而不总是更改PHP配置,这很方便。

有没有办法为命令行PHP程序实现相同的行为?我试图将“XDEBUG_PROFILE”作为命令行参数传递,但它不起作用。

通常,分析命令行PHP运行良好,但我希望具有与浏览器和HTTP服务器相同的每次调用灵活性。

有什么建议吗?

10 个答案:

答案 0 :(得分:242)

您可以使用-d标记传递INI设置:php -d xdebug.profiler_enable=On script.php

答案 1 :(得分:43)

我通过以下方式使用Ubuntu / Netbeans:

  • 将xdebug配置行从/etc/php5/apache2/php.ini文件复制到/etc/php5/cli/php.ini
  • 使用调试会话的名称设置环境变量(您可以从开始调试时页面netbeans启动的URL中的查询字符串中获取此命令)命令为:export XDEBUG_CONFIG =“idekey = netbeans-xdebug”

然后它只是在netbeans中开始调试并在命令行执行“php myscript.php”的情况。

答案 2 :(得分:31)

在远程网络服务器上使用PhpStorm我使用此命令:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

其中server_name代表PhpStorm项目conifuguration中服务器的名称

答案 3 :(得分:13)

Xdebug Remote Debugging页面所述,也可以通过XDEBUG_CONFIG环境变量启用性能分析,方法是加入“profile_enable = 1”指令:

XDEBUG_CONFIG="profiler_enable=1" php ...

答案 4 :(得分:11)

在VM上进行开发时,使用Netbeans的过程类似但不同的过程。

需要传入远程启用标志,自动启动标志,ide标志和远程主机的名称。

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

答案 5 :(得分:3)

我创建了一个shell脚本来处理客户端调试。

脚本名称:phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

我将此脚本放在/usr/bin中,并赋予其执行权限。

脚本接受传递给phpdebug的参数,并使用xdebug参数调用php,并将传递给shell脚本的参数追加到最后的$ *。

答案 6 :(得分:2)

在PhpStorm 7中使用WAMP我通过将我已经工作的xdebug设置从C:\ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini复制到C:\ wamp \ bin的xdebug部分来实现这一点\ PHP \ phpX.YZ \ php.ini中。然后我像这样运行我的脚本:

php -d xdebug.idekey=PHPSTORM script.php

这甚至适用于调试laravel工匠脚本

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

答案 7 :(得分:1)

Documentation from Jetbrains

要使用PHP命令行开关进行调试来启动脚本 设置一个环境变量,该变量将告诉XDebug连接到IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

此处idekey应该具有随机值。

使用以下命令行选项启动PHP:

php -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

您可以在Vagrant中使用10.0.2.2而不是127.0.0.1(请参阅相关的SO问题)。

答案 8 :(得分:1)

对于 Xdebug 3

现在使用 XDEBUG_MODE environment variable 可以轻松地为单个脚本启用 Xdebug:

XDEBUG_MODE=profile php script_to_be_profiled.php

答案 9 :(得分:0)

欢迎使用 xdebug 3!

现在是:

xdebug.mode=profile

因此:

php -d xdebug.mode=profile script.php