211 votes

Comment déclencher le profiler XDebug pour un script PHP script en ligne de commande ?

XDebug propose la directive de configuration xdebug.profiler_enable_trigger qui permet d'activer le profilage en passant le paramètre GET ou POST "XDEBUG_PROFILE" lors de l'appel d'un script via HTTP. C'est pratique si vous ne voulez pas que le profilage soit appliqué à TOUS vos script mais seulement à quelques cas particuliers sans avoir à changer constamment votre configuration PHP.

Existe-t-il un moyen d'obtenir le même comportement pour les programmes PHP en ligne de commande ? J'ai essayé de passer le paramètre XDEBUG_PROFILE comme argument de ligne de commande, mais cela n'a pas fonctionné.

En général, le profilage de PHP en ligne de commande fonctionne bien, mais j'aimerais avoir la même flexibilité par appel qu'avec un navigateur et un serveur HTTP.

0 votes

Désolé, j'essaie aussi mais je ne comprends pas. Que doit contenir le paramètre "XDEBUG_PROFILE" ?

0 votes

Peu importe ce que contient le paramètre, pourvu qu'il soit présent.

0 votes

Manque de soutien pour une Variable d'environnement XDEBUG_PROFILE est le bug 413 dans le XDebug bug tracker.

271voto

jou Points 1510

Vous pouvez transmettre des paramètres INI à l'aide de la fonction -d drapeau : php -d xdebug.profiler_enable=On script.php .

42 votes

Sur les systèmes *nix, vous pouvez faciliter l'utilisation en créant un alias, comme par exemple : alias phpp="php -d xdebug.profiler_enable=1" . Ainsi, lorsque vous ne souhaitez pas établir de profil, il vous suffit d'utiliser php et lorsque vous utilisez phpp .

16 votes

J'ai également dû spécifier le répertoire dans lequel je voulais que la sortie du profileur soit sauvegardée, ce qui a fonctionné pour moi : alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=." . Cela stocke toujours la sortie de débogage dans votre répertoire de travail actuel.

0 votes

Oui, je suis sous Eclipse et XAMPP dans un environnement Win7. Cela fonctionne.

50voto

Andrew Hancox Points 1202

J'ai réussi à le faire fonctionner sur Ubuntu/Netbeans :

  • copier les lignes de configuration xdebug du fichier /etc/php5/apache2/php.ini dans /etc/php5/cli/php.ini
  • en définissant une variable d'environnement avec le nom de la session de débogage (vous pouvez l'obtenir à partir de la chaîne de requête dans l'url de la page que Netbeans lance lorsque vous démarrez le débogage), la commande est : export XDEBUG_CONFIG="idekey=netbeans-xdebug"

Il suffit alors de lancer le débogage dans netbeans et de faire "php myscript.php" à la ligne de commande.

2 votes

Note : Après avoir terminé, si vous voulez garder votre débogueur à l'écoute et ne pas le déclencher avec une commande PHP, vous pouvez simplement utiliser : "unset XDEBUG_CONFIG".

0 votes

Cela fonctionne pour moi alors que la réponse ci-dessus ne fonctionne pas ;-)

4 votes

Il s'agit de déboguer (en parcourant le script). La question portait sur le profilage (analyse des performances de script, des fonctions qui prennent le plus de temps, etc.)

35voto

oliver.nadj Points 61

Avec PhpStorm sur un serveur web distant, j'utilise cette commande :

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

donde server_name représente le nom du serveur dans la conifuguration du projet PhpStorm

5 votes

J'ai ajouté ceci à .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}' " Pour déboguer, j'utilise donc xphp au lieu de php.

27voto

outis Points 39377

Comme décrit sur le site de l Débogage à distance Xdebug le profilage peut également être activé via la page XDEBUG_CONFIG en incluant une directive "profile_enable=1" :

XDEBUG_CONFIG="profiler_enable=1" php ...

Pour faciliter l'utilisation, la ligne de commande ci-dessus peut être écrite sous forme d'alias :

alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'

L'alias peut être ajouté à l'un des scripts de démarrage de votre shell (interactif) scripts, tels que ~/.bash_aliases o ~/.bashrc (en fonction de votre système).

1 votes

Cette réponse devrait être acceptée car il s'agit de la méthode la plus accessible. Le binaire PHP peut être enveloppé, il peut être défini comme interprète #!/x/php à des endroits que vous ne voulez pas toucher. En utilisant la variable env, il peut être activé sélectivement

12voto

Joshua Dance Points 937

Processus similaire, mais différent, pour le faire fonctionner avec Netbeans tout en développant sur une VM.

Il faut passer le drapeau "remote enabled", le drapeau "auto start", le drapeau "ide" et le nom de l'hôte distant.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X