Как запустить профилировщик XDebug для PHP-скрипта из командной строки? - PullRequest
185 голосов
/ 18 февраля 2010

XDebug предлагает директиву конфигурации «xdebug.profiler_enable_trigger», которая позволяет активировать профилирование, передавая параметр GET или POST «XDEBUG_PROFILE» при вызове скрипта через HTTP.Это удобно, если вы не хотите выполнять профилирование для ВСЕХ ваших сценариев, но только для нескольких особых случаев без постоянного изменения конфигурации PHP.

Есть ли способ добиться того же поведения для программ PHP из командной строки?Я пытался передать «XDEBUG_PROFILE» в качестве аргумента командной строки, но он не сработал.

В общем, профилирование командной строки PHP работает хорошо, но я хотел бы иметь такую ​​же гибкость для каждого вызовакак с браузером и HTTP-сервером.

Есть предложения?

Ответы [ 8 ]

245 голосов
/ 18 февраля 2010

Вы можете передать настройки INI с флагом -d: php -d xdebug.profiler_enable=On script.php.

43 голосов
/ 17 августа 2011

Я получил эту работу над Ubuntu / Netbeans:

  • копирование строк конфигурации xdebug из файла /etc/php5/apache2/php.ini в /etc/php5/cli/php.ini
  • установка переменной окружения с именем сеанса отладки (вы можете получить это из строки запроса в URL-адресе страницы, запускаемой netbeans при запуске отладки):

Тогда это просто случай запуска отладки в netbeans и выполнения "php myscript.php" в командной строке.

31 голосов
/ 21 ноября 2013

с 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

13 голосов
/ 28 августа 2013

Как описано на странице Xdebug Remote Debugging , профилирование также можно включить с помощью переменной среды XDEBUG_CONFIG, включив директиву profile_enable = 1:

XDEBUG_CONFIG="profiler_enable=1" php ...
11 голосов
/ 01 июля 2014

Схожий, но другой процесс для того, чтобы заставить его работать с Netbeans при разработке на виртуальной машине.

Необходимо передать флаг удаленного включения, флаг автоматического запуска, флаг ide и имя вашего удаленного хоста.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
3 голосов
/ 16 июля 2015

Я создал сценарий оболочки для обработки отладки клиента.

имя скрипта: phpdebug

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

Я поместил этот скрипт в /usr/bin и дал ему разрешения на выполнение.

Сценарий принимает аргументы, переданные в phpdebug, и вызывает php с аргументами xdebug и добавляет аргументы, переданные в сценарий оболочки, $ * в конце.

2 голосов
/ 25 июля 2014

В PhpStorm 7 с использованием WAMP я заставил это работать, скопировав мои уже работающие настройки xdebug из C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini в раздел xdebug C: \ wamp \ bin \ PHP \ phpX.YZ \ php.ini. Затем я запустил свой скрипт так:

php -d xdebug.idekey=PHPSTORM script.php

Это даже работало для отладки скриптов Laravel Artisan

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
1 голос
/ 01 февраля 2019

Документация от 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

Вы можете использовать 10.0.2.2 вместо 127.0.0.1 с Vagrant (см. Соответствующий вопрос SO).

...