如何触发命令行PHP脚本的XDebug分析器?

XDebug提供configuration指令“xdebug.profiler_enable_trigger”,当通过HTTP调用脚本时,允许通过传递GET或POST参数“XDEBUG_PROFILE”来激活分析。 如果您不想为所有脚本进行性能分析,而只是针对一些特殊情况,而无需始终更改PHPconfiguration,则此function十分方便。

有没有办法实现命令行PHP程序相同的行为? 我尝试通过“XDEBUG_PROFILE”作为命令行参数,但它没有工作。

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

有什么build议么?

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

我通过以下途径在Ubuntu / Netbeans上工作:

  • 将/etc/php5/apache2/php.ini文件中的xdebugconfiguration行复制到/etc/php5/cli/php.ini
  • 使用debugging会话的名称设置一个环境variables(你可以从开始debugging时netbeans启动页面的url中的查询string中获取)命令是:export XDEBUG_CONFIG =“idekey = netbeans-xdebug”

那么这只是一个在netbeans中开始debugging并在命令行执行“php myscript.php”的情况。

与远程web服务器上的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项目configuration中服务器的名称

如Xdebug远程debugging页面所述,还可以通过包含“profile_enable = 1”指令的XDEBUG_CONFIG环境variables启用概要分析:

 XDEBUG_CONFIG="profiler_enable=1" php ... 

在虚拟机上开发时,使用Netbeans的过程与此类似,但却有所不同。

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

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

我创build了一个shell脚本来处理客户端debugging。

脚本名称:phpdebug

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

我把这个脚本放在/usr/bin并赋予它执行权限。

该脚本将parameter passing到phpdebug中,并使用xdebug参数调用php,并将传递给shell脚本的参数追加到$ *的末尾。

在使用WAMP的PhpStorm 7中,我通过将已经工作的xdebug设置从C:\ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini复制到C:\ wamp \ bin \ php \ phpX.YZ \ php.ini中。 然后我这样跑我的脚本:

 php -d xdebug.idekey=PHPSTORM script.php 

这甚至用于debugginglaravel artisan脚本

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