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

问题描述 投票:0回答:12
XDebug 提供配置指令

xdebug.profiler_enable_trigger

,允许在通过 HTTP 调用脚本时通过传递 GET 或 POST 参数“XDEBUG_PROFILE”来激活分析。如果您不想对所有脚本进行分析,而只想对少数特殊情况进行分析,而不总是更改 PHP 配置,那么这会很方便。

有没有办法为命令行 PHP 程序实现相同的行为?我尝试将

XDEBUG_PROFILE

 作为命令行参数传递,但它不起作用。

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

php configuration command-line profiling xdebug
12个回答
276
投票
您可以使用

-d

 标志传递 INI 设置:
php -d xdebug.profiler_enable=On script.php


50
投票
我通过以下方式在 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”即可。


35
投票
在远程网络服务器上使用 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项目配置中的服务器名称


28
投票

Xdebug远程调试页面所述,还可以通过包含“profile_enable=1”指令的XDEBUG_CONFIG

环境变量来启用分析:

XDEBUG_CONFIG="profiler_enable=1" php ...
为了方便使用,上面的命令行可以写成别名:

alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'
可以将别名添加到 shell 的(交互式)启动脚本之一,例如 

~/.bash_aliases

~/.bashrc
(根据您的系统而定)。


12
投票
在虚拟机上进行开发时使其与 Netbeans 一起使用的过程类似但不同。

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

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

8
投票
对于 Xdebug 3

现在使用

XDEBUG_MODE

 
环境变量: 可以轻松地为单个脚本启用 Xdebug

XDEBUG_MODE=profile php script_to_be_profiled.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,并将传递到 shell 脚本的参数附加到末尾,$* 位于末尾。


2
投票
在使用 WAMP 的 PhpStorm 7 中,我通过将已经工作的 xdebug 设置从 C:\wamp in pache pache2.2.22 in\php.ini 复制到 C:\wamp in\php 的 xdebug 部分来实现此功能\phpX.Y.Z\php.ini。然后我像这样运行我的脚本:

php -d xdebug.idekey=PHPSTORM script.php

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

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

1
投票

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


1
投票
我需要将以下内容添加到我的

php.ini

xdebug.mode=debug

https://xdebug.org/docs/step_debug#configure

以下是我的

.zshrc


export XDEBUG_SESSION=1

https://xdebug.org/docs/step_debug#activate-debugger-cmd


0
投票
欢迎使用 xdebug 3!

现在是:

xdebug.mode=profile
因此:

php -d xdebug.mode=profile script.php
    

0
投票
正如@Steve Kirsch提到的,你需要像这样添加

-d xdebug.start_with_request=1

php -d xdebug.start_with_request=1 script.php
    
© www.soinside.com 2019 - 2024. All rights reserved.