Як запустити XDebug-профілер для скрипту PHP командного рядка?


195

XDebug пропонує конфігураційну директиву "xdebug.profiler_enable_trigger", яка дозволяє активувати профілювання, передаючи параметр GET або POST "XDEBUG_PROFILE" під час виклику сценарію через HTTP. Це зручно, якщо ви не хочете профілювати для всіх своїх сценаріїв, а лише для кількох спеціальних випадків, не змінюючи конфігурацію PHP.

Чи є спосіб досягти однакової поведінки для програм PHP командного рядка? Я намагався передати "XDEBUG_PROFILE" як аргумент командного рядка, але це не вийшло.

Взагалі, командний рядок PHP працює добре, але я хотів би мати таку ж гнучкість за викликом, що і для браузера та HTTP-сервера.

Будь-які пропозиції?


Вибачте, я також намагаюся це зробити, але я не розумію. Що має бути у параметрі "XDEBUG_PROFILE"?
Андреш Серж

Не має значення, що є в Параметрі, доки він взагалі присутній.
selfawaresoup

Відсутність підтримки змінної середовища XDEBUG_PROFILE - це помилка 413 у трейдері помилок XDebug.
outis

Відповіді:


258

Ви можете передати параметри INI з -dпрапором: php -d xdebug.profiler_enable=On script.php.


39
У системах на основі * Нікс, ви можете зробити це трохи простіше у використанні, створюючи псевдонім, наприклад: alias phpp="php -d xdebug.profiler_enable=1". Таким чином, коли ви не хочете, щоб профіль просто використовувався phpта коли ви його використовували phpp.
JC Yamokoski

14
Я повинен був вказати , який каталог я хотів висновок Профілювальники бути збережений як добре, так що це woked для мене alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Це завжди зберігає вихід налагодження у вашому поточному робочому каталозі.
Lars Nyström

так, я перебуваю під Eclipse та XAMPP у середовищі Win7. Це працює.
гушоар

4
У Windows ви можете створити у своєму режимі PATH dir 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
  • встановлення змінної середовища з назвою сеансу налагодження (ви можете отримати це з рядка запиту в URL-адресі сторінки, запускається netbeans при запуску налагодження) команда: експортувати XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Тоді це просто випадок запуску налагодження в netbeans та виконання "php myscript.php" у командному рядку.


2
Примітка. Після того, як ви хочете, щоб ваш налагоджувач прослуховував і не запускав його командою PHP, ви можете просто використовувати: "unset XDEBUG_CONFIG".
Dan LaManna

Це насправді працює для мене, поки відповідь вище не ;-)
Джонатан Люті

4
Йдеться про налагодження (перехід через сценарій). Питання стосувалося профілювання (аналізу продуктивності сценарію, які функції потребують тривалого часу тощо)
Меттью Флашен

32

з 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

19

Як описано на сторінці віддаленої налагодження Xdebug , профілювання також можна включити через XDEBUG_CONFIGзмінну середовища, включивши директиву "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

Ця відповідь повинна бути прийнятою відповіддю, оскільки це найдоступніший метод. PHP-двійковий файл може бути завернутий, він може бути встановлений як інтерпретатор #! / X / php у місцях, до яких не хочеться торкатися. Використовуючи змінну env, її можна вибірково ввімкнути
Джон

11

Аналогічний, але інший процес налагодження його роботи з Netbeans під час розробки на VM.

Потрібно вказати прапор, увімкнутий віддалений, прапор автоматичного запуску, прапор ide та ім’я віддаленого хоста.

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

4

Я створив сценарій оболонки для обробки налагодження клієнта.

назва сценарію: phpdebug

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

Я помістив цей скрипт /usr/binі дав йому виконувати дозволи.

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


Так, у моєму випадку все одно мені потрібно було додати налаштування INI для мого віддаленого хоста. Це все, що потрібно було зробити налагодження в моєму IDE з команди PHP CLI.
Спенсер Вільямс

Насправді мені також потрібно було встановити XDEBUG_CONFIGзмінну середовища. Саме це і xdebug.remote_hostналаштування змусили його працювати.
Спенсер Вільямс

2

У 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

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

0

Документація від Jetbrains

Для запуску сценарію з налагодження за допомогою перемикачів командного рядка PHP Встановіть змінну середовища, яка б повідомила XDebug підключитися до IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Тут ідеке має мати випадкове значення.

Запустіть 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 (див. Відповідне запитання щодо ТА).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.