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


194

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

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

通常,分析命令行PHP可以很好地工作,但是我希望具有与浏览器和HTTP服务器相同的每次调用灵活性。

有什么建议?


抱歉,我也在尝试这个,但是我不明白。“ XDEBUG_PROFILE”参数应该是什么?
Andresch Serj 2011年

只要参数存在就无所谓。
selfawaresoup

XDebug错误跟踪器中的错误413是缺少对XDEBUG_PROFILE环境变量的支持的。
outis

Answers:


257

您可以通过-d标志传递INI设置php -d xdebug.profiler_enable=On script.php


39
在基于* nix的系统上,您可以通过创建别名(例如:)使它更易于使用alias phpp="php -d xdebug.profiler_enable=1"。这样,当您不想分析仅使用状态时php以及您确实要使用状态时phpp
JC Yamokoski 2012年

14
我还必须指定我想要将探查器输出保存到的目录,所以这对我很方便:alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=."。这总是将调试输出存储在当前工作目录中。
LarsNyström2015年

是的,我在Win7环境中使用Eclipse和XAMPP。有用。
gouchaoer 2015年

4
在Windows上,您可以在PATH目录中创建一个phpp.cmd文件,其中包含php -d xdebug.profiler_enable=On %*您可以运行phpp <args>
Gras Double

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
注意:完成后,如果您想让调试器继续监听而不用PHP命令触发它,则可以使用:“ unset XDEBUG_CONFIG”。
Dan LaManna 2012年

这实际上对我
有用,

4
这与调试(逐步执行脚本)有关。问题是关于性能分析(分析脚本的性能,哪些功能需要很长时间等)
Matthew Flaschen

32

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


5
我将此添加到.bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | 切-d \“ = \” -f 2 | awk'{print $ 1}',"因此,当我想调试时,我使用xphp而不是php
Oliver nadj 2014年

18

Xdebug远程调试页面上所述,还可以通过XDEBUG_CONFIG包含“ profile_enable = 1”指令通过环境变量来启用分析:

XDEBUG_CONFIG="profiler_enable=1" php ...

这个答案应该是公认的答案,因为它是最易于访问的方法。PHP二进制文件可能已包装,可能会在您不想触摸的地方将其设置为解释器#!/ x / php。使用env变量可以有选择地启用它
John

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

4

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

脚本名称:phpdebug

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

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

该脚本采用传递给phpdebug的参数,并使用xdebug参数调用php,并将传递给外壳脚本的参数附加到$ *末尾。


是的,无论如何,我所需要做的就是为远程主机添加INI设置。这就是通过PHP CLI命令在IDE中进行调试所需要的全部。
Spencer Williams

实际上,我确实还需要设置XDEBUG_CONFIG环境变量。正是这样,并且xdebug.remote_host设置使其起作用。
Spencer Williams

2

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

php -d xdebug.idekey=PHPSTORM script.php

这甚至可以用于调试laravel artisan脚本

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.