web-dev-qa-db-fra.com

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

XDebug propose la directive de configuration "xdebug.profiler_enable_trigger" qui permet d'activer le profilage en passant le GET ou POST "XDEBUG_PROFILE" lors de l'appel d'un script via HTTP. C'est pratique si vous ne voulez pas 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 en ligne de commande PHP?)? J'ai essayé de passer le "XDEBUG_PROFILE" en tant qu'argument en ligne de commande, mais cela n'a pas fonctionné.

En général, la ligne de commande de profilage PHP fonctionne bien, mais j'aimerais disposer de la même souplesse au moment des appels que pour un navigateur et un serveur HTTP.

Aucune suggestion?

186
selfawaresoup

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

246
jou

Je travaille sur Ubuntu/Netbeans par:

  • copier les lignes de configuration xdebug du fichier /etc/php5/Apache2/php.ini dans /etc/php5/cli/php.ini
  • si vous définissez 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 située dans l’URL de la page que netbeans lance lorsque vous démarrez le débogage), la commande est la suivante: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Ensuite, il suffit de démarrer le débogage dans Netbeans et de faire "php myscript.php" sur la ligne de commande.

43
Andrew Hancox

avec PhpStorm sur le 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_name représente le nom du serveur dans la conifuguration du projet PhpStorm

31
oliver nadj

Comme décrit sur la page Xdebug Remote Debugging , le profilage peut également être activé via la XDEBUG_CONFIG variable d’environnement en incluant une directive "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...
14
outis

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

Vous devez transmettre l'indicateur activé à distance, l'indicateur de démarrage automatique, l'indicateur 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
11
Joshua Dance

J'ai créé un script shell pour gérer le débogage du 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 dans /usr/bin et lui a 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, le $ * à la fin.

4
user2970583

Dans PhpStorm 7 en utilisant WAMP, cela a fonctionné en copiant mes paramètres xdebug déjà actifs dans C:\wamp\bin\Apache\apache2.2.22\bin\php.ini vers la section xdebug de C:\wamp\bin\php\phpX.YZ\php.ini. Puis j'ai couru mon script comme suit:

php -d xdebug.idekey=PHPSTORM script.php

Cela a même fonctionné pour le débogage laravel scripts artisanaux

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

Documentation de Jetbrains

Pour démarrer le script avec le débogage à l'aide de PHP commutateurs de ligne de commande, définissez une variable d'environnement qui indiquerait à XDebug de se connecter à l'EDI:

Windows/MacOS/Linux

export XDEBUG_CONFIG="idekey=123"  

Ici, idekey devrait 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 connexe SO question).

1
adm1n