[英]How to trigger XDebug profiler for a command line PHP script?
XDebug 提供配置指令xdebug.profiler_enable_trigger
,允許在通過 HTTP 調用腳本時通過傳遞 GET 或 POST 參數“XDEBUG_PROFILE”來激活分析。 如果您不想對所有腳本進行性能分析,而只想對少數特殊情況進行分析而不總是更改 PHP 配置,這將非常方便。
有沒有辦法為命令行 PHP 程序實現相同的行為? 我試圖將XDEBUG_PROFILE
作為命令行參數傳遞,但沒有奏效。
一般來說,分析命令行 PHP 效果很好,但我希望具有與瀏覽器和 HTTP 服務器相同的每次調用靈活性。
您可以使用-d
標志傳遞 INI 設置: php -d xdebug.profiler_enable=On script.php
。
我通過以下方式在 Ubuntu/Netbeans 上工作:
然后它只是在netbeans中開始調試並在命令行中執行“php myscript.php”的情況。
在遠程網絡服務器上使用 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 項目配置中的服務器名稱
如Xdebug 遠程調試頁面所述,還可以通過包含“profile_enable=1”指令的XDEBUG_CONFIG
環境變量啟用分析:
XDEBUG_CONFIG="profiler_enable=1" php ...
為了方便使用,上面的命令行可以寫成別名:
alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'
別名可以添加到您的 shell 的(交互式)啟動腳本之一,例如~/.bash_aliases
或~/.bashrc
(根據您的系統)。
在 VM 上進行開發時使其與 Netbeans 一起工作的類似但不同的過程。
需要傳入遠程啟用標志、自動啟動標志、ide 標志和遠程主機的名稱。
php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
我創建了一個 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 腳本的參數附加到末尾,即 $*。
在使用 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 工匠腳本
php -d xdebug.idekey=PHPSTORM artisan db:seed --force
現在,使用XDEBUG_MODE
環境變量可以輕松地為單個腳本啟用 Xdebug:
XDEBUG_MODE=profile php script_to_be_profiled.php
使用 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=profile
所以:
php -d xdebug.mode=profile script.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.