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

194

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 de profilage pour TOUS vos scripts mais seulement pour quelques cas particuliers sans toujours changer 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 "XDEBUG_PROFILE" comme argument de ligne de commande mais cela n'a pas fonctionné.

En général, le profilage 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.

Aucune suggestion?

selfawaresoup
la source
Désolé, j'essaye aussi mais je ne comprends pas. Que doit contenir le paramètre "XDEBUG_PROFILE"?
Andresch Serj
Peu importe le contenu du paramètre tant qu'il est présent.
selfawaresoup
Le manque de prise en charge d'une variable d'environnement XDEBUG_PROFILE est le bogue 413 dans le suivi des bogues XDebug.
2013

Réponses:

257

Vous pouvez passer des paramètres INI avec le -ddrapeau: php -d xdebug.profiler_enable=On script.php.

jou
la source
39
* Sur les systèmes basés sur nix, vous pouvez faire un peu plus facile à utiliser en créant un alias, tels que: alias phpp="php -d xdebug.profiler_enable=1". De cette façon, lorsque vous ne souhaitez pas profiler, utilisez simplement phpet lorsque vous utilisez phpp.
JC Yamokoski
14
Je devais spécifier le répertoire que je voulais la sortie de profileur à enregistrer en tant que bien, donc ce woked 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.
Lars Nyström
oui, je suis sous Eclipse et XAMPP dans l'environnement Win7. Ça marche.
gouchaoer
4
Sous Windows, vous pouvez créer dans votre phpp.cmdrépertoire PATH un fichier, contenant php -d xdebug.profiler_enable=On %*ensuite vous pouvez simplement l'exécuter phpp <args>.
Gras Double du
43

J'ai obtenu ce travail sur Ubuntu / Netbeans par:

  • copier les lignes de configuration de xdebug du fichier /etc/php5/apache2/php.ini dans /etc/php5/cli/php.ini
  • définir 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"

Ensuite, il s'agit simplement de commencer le débogage dans les netbeans et de faire "php myscript.php" sur la ligne de commande.

Andrew Hancox
la source
2
Remarque: Une fois que vous avez terminé, si vous souhaitez garder votre débogueur à l'écoute et ne pas le déclencher avec une commande PHP, vous pouvez simplement utiliser: "unset XDEBUG_CONFIG".
Dan LaManna
Cela fonctionne réellement pour moi alors que la réponse ci-dessus ne l'est pas ;-)
Jonathan Liuti
4
Il s'agit de déboguer (parcourir le script). La question portait sur le profilage (analyse des performances du script, quelles fonctions prennent du temps, etc.)
Matthew Flaschen
32

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

server_namereprésente le nom du serveur dans la configuration du projet PhpStorm

oliver nadj
la source
5
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}' "donc quand je veux déboguer j'utilise xphp au lieu de php
oliver nadj
18

Comme décrit sur la page de débogage à distance de Xdebug , le profilage peut également être activé via la XDEBUG_CONFIGvariable d'environnement en incluant une directive "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...
outis
la source
Celui-ci devrait être la réponse acceptée car c'est la méthode la plus accessible. Le binaire PHP peut être encapsulé, il peut être défini comme interpréteur #! / X / php aux endroits que vous ne souhaitez pas toucher. En utilisant la variable env, elle peut être activée de manière sélective
John
11

Processus similaire, mais différent, pour le faire fonctionner avec Netbeans lors du développement sur une machine virtuelle.

Vous devez passer le drapeau activé à distance, le drapeau de démarrage automatique, le drapeau IDE et le nom de votre hôte distant.

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

J'ai créé un script shell pour gérer le débogage client.

nom du script: phpdebug

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

J'ai placé ce script /usr/binet lui ai donné des autorisations d'exécution.

Le script prend les arguments passés dans phpdebug et appelle php avec les arguments xdebug et ajoute les arguments passés dans le script shell, $ * à la fin.

user2970583
la source
Oui, dans mon cas de toute façon, tout ce dont j'avais besoin était d'ajouter le paramètre INI pour mon hôte distant. C'était tout ce qui était nécessaire pour faire le débogage dans mon IDE à partir d'une commande PHP CLI.
Spencer Williams
En fait, j'avais également besoin de définir la XDEBUG_CONFIGvariable d'environnement. Rien que cela et le xdebug.remote_hostcadre l'ont fait fonctionner.
Spencer Williams
2

Dans PhpStorm 7 à l'aide de WAMP, j'ai réussi à le faire en copiant mes paramètres xdebug déjà opérationnels de C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini vers la section xdebug de C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Ensuite, j'ai exécuté mon script comme ceci:

php -d xdebug.idekey=PHPSTORM script.php

Cela a même fonctionné pour le débogage de scripts d'artisan laravel

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

Documentation de Jetbrains

Pour démarrer le script avec le débogage à l'aide des commutateurs de ligne de commande PHP Définissez une variable d'environnement qui dirait à XDebug de se connecter à l'IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Ici, idekey doit avoir une valeur aléatoire.

Lancez PHP avec les options de ligne de commande suivantes:

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

Vous pouvez utiliser 10.0.2.2 au lieu de 127.0.0.1 avec Vagrant (voir la question SO connexe).

adm1n
la source