Как запустить профайлер XDebug для командной строки PHP скрипт?

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

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

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

Любые предложения?

Ответ 1

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

Ответ 2

Я работал над Ubuntu/Netbeans:

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

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

Ответ 3

с 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 conifuguration

Ответ 4

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

XDEBUG_CONFIG="profiler_enable=1" php ...

Ответ 5

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

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

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

Ответ 6

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

script имя: phpdebug

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

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

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

Ответ 7

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

php -d xdebug.idekey=PHPSTORM script.php

Это даже работало для отладки мастерских скриптов laravel

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

Ответ 8

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