Wie kann ich den XDebug-Profiler für ein Befehlszeilen-PHP-Skript auslösen?

194

XDebug bietet die Konfigurationsanweisung "xdebug.profiler_enable_trigger", mit der die Profilerstellung aktiviert werden kann, indem beim Aufrufen eines Skripts über HTTP der GET- oder POST-Parameter "XDEBUG_PROFILE" übergeben wird. Dies ist praktisch, wenn Sie keine Profilerstellung für ALLE Ihre Skripte wünschen, sondern nur für einige Sonderfälle, ohne Ihre PHP-Konfiguration immer zu ändern.

Gibt es eine Möglichkeit, dasselbe Verhalten für Befehlszeilen-PHP-Programme zu erreichen? Ich habe versucht, "XDEBUG_PROFILE" als Befehlszeilenargument zu übergeben, aber es hat nicht funktioniert.

Im Allgemeinen funktioniert das Profiling von Befehlszeilen-PHP gut, aber ich möchte die gleiche Flexibilität pro Anruf wie bei einem Browser und einem HTTP-Server.

Irgendwelche Vorschläge?

selfawaresoup
quelle
Entschuldigung, ich versuche es auch, aber ich verstehe es nicht. Was sollte im Parameter "XDEBUG_PROFILE" enthalten sein?
Andresch Serj
Es spielt keine Rolle, was im Parameter enthalten ist, solange er überhaupt vorhanden ist.
Selfawaresoup
Die mangelnde Unterstützung für eine Umgebungsvariable XDEBUG_PROFILE ist der Fehler 413 im XDebug-Bug-Tracker.
Outis

Antworten:

257

Sie können INI-Einstellungen mit dem -dFlag übergeben : php -d xdebug.profiler_enable=On script.php.

jou
quelle
39
Auf * nix-basierten Systemen können Sie die Verwendung etwas vereinfachen, indem Sie einen Alias ​​erstellen, z alias phpp="php -d xdebug.profiler_enable=1". Auf diese Weise, wenn Sie kein Profil verwenden möchten, verwenden phpSie es einfach und wenn Sie es verwenden phpp.
JC Yamokoski
14
Ich musste angeben, in welchem ​​Verzeichnis die Profiler-Ausgabe ebenfalls gespeichert werden soll, daher wurde ich geweckt : alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Dadurch wird die Debug-Ausgabe immer in Ihrem aktuellen Arbeitsverzeichnis gespeichert.
Lars Nyström
Ja, ich bin unter Eclipse und XAMPP in Win7-Umgebung. Es klappt.
Gouchaoer
4
Unter Windows können Sie in Ihrem PATH-Verzeichnis eine phpp.cmdDatei erstellen, die php -d xdebug.profiler_enable=On %*Sie dann einfach ausführen können phpp <args>.
Gras Double
43

Ich habe dies auf Ubuntu / Netbeans funktioniert von:

  • Kopieren der xdebug-Konfigurationszeilen aus der Datei /etc/php5/apache2/php.ini in /etc/php5/cli/php.ini
  • Wenn Sie eine Umgebungsvariable mit dem Namen der Debug-Sitzung festlegen (dies können Sie der Abfragezeichenfolge in der URL der Seite entnehmen, die Netbeans startet, wenn Sie mit dem Debuggen beginnen), lautet der Befehl: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Dann geht es einfach darum, das Debuggen in Netbeans zu starten und "php myscript.php" in der Befehlszeile auszuführen.

Andrew Hancox
quelle
2
Hinweis: Wenn Sie fertig sind und Ihren Debugger nicht mehr mit einem PHP-Befehl auslösen möchten, können Sie einfach Folgendes verwenden: "XDEBUG_CONFIG deaktivieren".
Dan LaManna
Dies funktioniert tatsächlich für mich, während die Antwort oben nicht ist ;-)
Jonathan Liuti
4
Hier geht es um das Debuggen (Durchlaufen des Skripts). Die Frage betraf die Profilerstellung (Analyse der Skriptleistung, welche Funktionen lange dauern usw.)
Matthew Flaschen
32

Mit PhpStorm auf einem Remote-Webserver verwende ich diesen Befehl:

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

Dabei server_namesteht der Name des Servers in der PhpStorm-Projektzentrifugation

oliver nadj
quelle
5
Ich habe dies zu .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 | hinzugefügt cut -d "=" -f 2 | awk '{print $ 1}' "also wenn ich debuggen will, benutze ich xphp anstelle von php
oliver nadj
18

Wie auf der Seite Xdebug Remote Debugging beschrieben , kann die Profilerstellung auch über die XDEBUG_CONFIGUmgebungsvariable aktiviert werden , indem eine Direktive "profile_enable = 1" eingefügt wird:

XDEBUG_CONFIG="profiler_enable=1" php ...
outis
quelle
Dies sollte die akzeptierte Antwort sein, da es die am besten zugängliche Methode ist. PHP-Binärdateien werden möglicherweise umbrochen und an Stellen, die Sie nicht berühren möchten, als Interpreter #! / X / php festgelegt. Mit der env-Variablen kann es selektiv aktiviert werden
John
11

Ähnliches, aber anderes Verfahren, damit es während der Entwicklung auf einer VM mit Netbeans funktioniert.

Sie müssen das Remote-Aktivierungsflag, das Autostart-Flag, das Ide-Flag und den Namen Ihres Remote-Hosts übergeben.

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

Ich habe ein Shell-Skript für das Client-Debugging erstellt.

Skriptname: phpdebug

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

Ich habe dieses Skript eingefügt /usr/binund ihm Ausführungsberechtigungen erteilt.

Das Skript nimmt die an phpdebug übergebenen Argumente und ruft php mit den xdebug-Argumenten auf und hängt die an das Shell-Skript übergebenen Argumente an, das $ * am Ende.

user2970583
quelle
Ja, in meinem Fall musste ich lediglich die INI-Einstellung für meinen Remote-Host hinzufügen. Das war alles, was zum Debuggen in meiner IDE über einen PHP-CLI-Befehl erforderlich war.
Spencer Williams
Eigentlich musste ich auch die XDEBUG_CONFIGUmgebungsvariable setzen. Genau das und die xdebug.remote_hostEinstellung haben es funktioniert.
Spencer Williams
2

In PhpStorm 7 mit WAMP funktionierte dies, indem ich meine bereits funktionierenden xdebug-Einstellungen von C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini in den xdebug-Abschnitt von C: \ wamp \ bin \ php \ kopierte phpX.YZ \ php.ini. Dann habe ich mein Skript so ausgeführt:

php -d xdebug.idekey=PHPSTORM script.php

Dies funktionierte sogar zum Debuggen von Laravel-Skripten

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
Chukky Nze
quelle
0

Dokumentation von Jetbrains

So starten Sie das Skript mit dem Debuggen mithilfe von PHP-Befehlszeilenschaltern Legen Sie eine Umgebungsvariable fest, die XDebug anweist, eine Verbindung zur IDE herzustellen:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Hier sollte idekey einen zufälligen Wert haben.

Starten Sie PHP mit den folgenden Befehlszeilenoptionen:

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

Sie können 10.0.2.2 anstelle von 127.0.0.1 mit Vagrant verwenden (siehe verwandte SO-Frage).

adm1n
quelle