Come attivare il profiler XDebug per uno script PHP a riga di comando?


194

XDebug offre la direttiva di configurazione "xdebug.profiler_enable_trigger" che consente di attivare la creazione di profili passando il parametro GET o POST "XDEBUG_PROFILE" quando si chiama uno script tramite HTTP. Questo è utile se non vuoi profilare TUTTI i tuoi script ma solo per alcuni casi speciali senza cambiare sempre la configurazione di PHP.

C'è un modo per ottenere lo stesso comportamento per i programmi PHP a riga di comando? Ho provato a passare "XDEBUG_PROFILE" come argomento della riga di comando ma non ha funzionato.

In generale, la riga di comando di profilazione PHP funziona bene, ma mi piacerebbe avere la stessa flessibilità per chiamata di un browser e un server HTTP.

Eventuali suggerimenti?


Mi dispiace, sto provando anche questo ma non capisco. Cosa dovrebbe essere nel parametro "XDEBUG_PROFILE"?
Andresch Serj,

Non importa ciò che è nel parametro fintanto che è presente.
selfawaresoup,

La mancanza di supporto per una variabile d'ambiente XDEBUG_PROFILE è il bug 413 nel tracker dei bug di XDebug.
uscita il

Risposte:


257

È possibile passare impostazioni INI con la -dbandiera: php -d xdebug.profiler_enable=On script.php.


39
Sui sistemi * nix a base, è possibile rendere questo un po 'più facile da usare con la creazione di un alias, come ad esempio: alias phpp="php -d xdebug.profiler_enable=1". In questo modo quando non vuoi creare un profilo, usa phpe quando lo usi phpp.
JC Yamokoski,

14
Ho dovuto specificare quali directory volevo l'uscita profiler da salvare in pure, quindi questo woked per me: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Ciò memorizza sempre l'output di debug nella directory di lavoro corrente.
Lars Nyström,

Sì, sono sotto Eclipse e XAMPP nell'ambiente Win7. Funziona.
Gouchaoer,

4
Su Windows, puoi creare nel tuo percorso PATH un phpp.cmdfile, contenente php -d xdebug.profiler_enable=On %*quindi puoi semplicemente eseguirlo phpp <args>.
Gras Double,

43

L'ho fatto funzionare su Ubuntu / Netbeans da:

  • copiando le righe di configurazione di xdebug dal file /etc/php5/apache2/php.ini in /etc/php5/cli/php.ini
  • impostare una variabile di ambiente con il nome della sessione di debug (è possibile ottenerlo dalla stringa di query nell'URL della pagina avviata da netbeans quando si avvia il debug) il comando è: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Quindi è semplicemente il caso di avviare il debug in netbeans e fare "php myscript.php" dalla riga di comando.


2
Nota: dopo aver terminato se desideri mantenere il debugger in ascolto e non attivarlo con un comando PHP, puoi semplicemente utilizzare: "unset XDEBUG_CONFIG".
Dan LaManna,

Questo in realtà funziona per me mentre la risposta sopra non è ;-)
Jonathan Liuti il

4
Si tratta di debug (passare attraverso lo script). La domanda riguardava la profilazione (analisi delle prestazioni dello script, quali funzioni richiedono molto tempo, ecc.)
Matthew Flaschen

32

con PhpStorm sul server web remoto utilizzo questo comando:

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

dove server_namesta per nome del server nella conifugurazione del progetto PhpStorm


5
ho aggiunto questo a .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 | cut -d \ "= \" -f 2 | awk "{print $ 1}", "quindi quando voglio eseguire il debug utilizzo xphp invece di php
oliver nadj

18

Come descritto nella pagina di debug remoto di Xdebug , la profilazione può anche essere abilitata tramite la XDEBUG_CONFIGvariabile d'ambiente includendo una direttiva "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

Questa dovrebbe essere la risposta accettata in quanto è il metodo più accessibile. Il binario PHP potrebbe essere racchiuso, potrebbe essere impostato come interprete #! / X / php in punti che non si desidera toccare. Utilizzando la variabile env può essere abilitato in modo selettivo
John,

11

Processo simile ma diverso per farlo funzionare con Netbeans durante lo sviluppo su una macchina virtuale.

È necessario passare il flag abilitato remoto, il flag di avvio automatico, il flag ide e il nome dell'host remoto.

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

4

Ho creato uno script di shell per gestire il debug dei client.

nome dello script: phpdebug

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

Ho inserito questo script /usr/bine gli ho dato le autorizzazioni di esecuzione.

Lo script prende gli argomenti passati a phpdebug e chiama php con gli argomenti xdebug e aggiunge gli argomenti passati allo script della shell, $ * alla fine.


Sì, nel mio caso comunque, tutto ciò di cui avevo bisogno era aggiungere l'impostazione INI per il mio host remoto. Era tutto ciò che era necessario per eseguire il debug nel mio IDE da un comando CLI PHP.
Spencer Williams,

In realtà, ho anche dovuto impostare la XDEBUG_CONFIGvariabile d'ambiente. Solo questo e l' xdebug.remote_hostimpostazione lo hanno fatto funzionare.
Spencer Williams,

2

In PhpStorm 7 usando WAMP ho ottenuto che funzionasse copiando le mie impostazioni xdebug già funzionanti da C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini nella sezione xdebug di C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Quindi ho eseguito la mia sceneggiatura in questo modo:

php -d xdebug.idekey=PHPSTORM script.php

Questo ha funzionato anche per il debug di script artigianali laravel

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

0

Documentazione di Jetbrains

Per avviare lo script con il debug utilizzando le opzioni della riga di comando PHP Impostare una variabile di ambiente che indichi a XDebug di connettersi all'IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Qui idekey dovrebbe avere un valore casuale.

Avvia PHP con le seguenti opzioni della riga di comando:

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

È possibile utilizzare 10.0.2.2 invece di 127.0.0.1 con Vagrant (vedere la relativa domanda SO).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.