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

XDebug提供了配置指令xdebug.profiler_enable_trigger,该指令允许通过传递GET或POST参数来激活分析;当通过HTTP调用脚本时。如果您不想对所有脚本进行概要分析,而只是在不总是更改PHP配置的情况下对少数特殊情况进行概要分析,那么这种方法非常方便。

是否有一种方法可以在PHP命令行程序中实现相同的行为?我试图将XDEBUG_PROFILE作为命令行参数传递,但它不起作用。

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

103508 次浏览

你可以通过-d标志传递INI设置:

我得到了这个工作在Ubuntu/Netbeans:

  • 将/etc/php5/apache2/php.ini文件中的xdebug配置行复制到/etc/php5/cli/php.ini
  • 使用调试会话的名称设置一个环境变量(当你开始调试时,你可以从netbeans启动的页面url中的查询字符串中获得),命令是export XDEBUG_CONFIG="idekey=netbeans-xdebug"

然后只需在netbeans中开始调试,并在命令行执行“php myscript.php”即可。

正如远程调试页中所描述的,剖析也可以通过XDEBUG_CONFIG环境变量通过包含“profile_enable=1”来启用。指令:

XDEBUG_CONFIG="profiler_enable=1" php ...

为了方便使用,上面的命令行可以写成别名:

alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'

别名可以添加到您的shell(交互式)启动脚本之一,例如~/.bash_aliases~/.bashrc(适用于您的系统)。

在远程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项目配置中的服务器名称

在VM上开发时,让它与Netbeans一起工作的过程类似,但不同。

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

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

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

php -d xdebug.idekey=PHPSTORM script.php

这甚至适用于调试laravel artisan脚本

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

我创建了一个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脚本中,$*位于最后。

来自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问题)。

对于Xdebug 3

现在,使用XDEBUG_MODE 环境变量可以很容易地为单个脚本启用Xdebug:

XDEBUG_MODE=profile php script_to_be_profiled.php

欢迎来到xdebug 3!

现在是:

xdebug.mode=profile

因此:

php -d xdebug.mode=profile script.php