111 votes

XDebug et serveur RESTful en utilisant PHPStorm ou POSTman

Comment puis-je obtenir un client REST (comme celui intégré dans PHPStorm ou POSTman) pour fonctionner avec XDebug?

Dans ma configuration actuelle de XDebug, en utilisant PHPStorm et le Bookmarklet fourni, je parviens à le faire fonctionner à la fois dans Chrome et Firefox - mais dès que j'essaie avec POSTman ou tout autre client REST, je ne parviens pas à le démarrer.

Santé.

262voto

LazyOne Points 25070

Vous pouvez utiliser l'une de ces approches :

  1. Configurez votre Xdebug (en modifiant php.ini) pour tenter de déboguer chaque script PHP. L'option clé :

    • Xdebug v2 : xdebug.remote_autostart = 1
    • Xdebug v3 : xdebug.start_with_request = yes
  2. Ajoutez le paramètre de démarrage de session Xdebug à l'URL réelle (XDEBUG_SESSION_START={{CLÉ}} -- https://xdebug.org/docs/step_debug#manual-init), par exemple : ?XDEBUG_SESSION_START=PHPSTORM

  3. Transmettez le cookie Xdebug en tant que partie de la requête (celui qui est défini par bookmarklet ou extension de navigateur, par exemple).

Pour que cela fonctionne : assurez-vous que l'icône "phone handle" est activée à l'avance dans PhpStorm (Run | Start Listen for PHP Debug Connection).


P.S. Si vous utilisez Postman, Insominia ou similaire (un autre client REST), alors le meilleur / le plus transparent à mon avis est d'utiliser le cookie Xdebug. Vous utilisez très probablement déjà des Environnements distincts (par exemple "dev", "test", "production") donc vous pouvez avoir un tel cookie uniquement là où il est nécessaire (cela dépend bien sûr de l'outil et de la version utilisée).

Ainsi, il n'est pas nécessaire de modifier l'URL (même si vous l'avez en tant que "paramètre conditionnel" présent pour certains environnements et absent pour d'autres) ou de configurer Xdebug pour "déboguer toutes les requêtes" du tout.

Un exemple de cookie Xdebug tel que celui de mon Postman (modifiez-le si nécessaire ; ici il est défini pour le domaine factice local some-domain.local.test) :

XDEBUG_SESSION=valeur; Chemin=/; Domaine=.some-domain.local.test; Expires=Mar, 19 Jan 2038 03:14:07 GMT;

Comme l'URL hôte devrait faire partie de votre Environnement (par exemple, l'URL de point de terminaison sera comme {{host}}/api/v1/bienvenue), alors un tel cookie sera envoyé uniquement au domaine de développement et pas à celui de production.

30voto

Ajoutez simplement ?XDEBUG_SESSION_START=filter_string à la fin de l'URL, par exemple :

https://new-supplier.local/api/login?XDEBUG_SESSION_START=PHPSTORM

PHPSTORM est ma chaîne de filtre par défaut, vous pouvez utiliser ce que vous voulez. Votre éditeur doit être configuré pour filtrer les connexions par clé IDE (chaîne de filtrage), et c'est tout. Vous devriez pouvoir déboguer de la même manière que depuis Chrome ou FF.

11voto

Ali Samie Points 75

Il y a une façon plus dynamique de le faire:

  1. Définissez une variable dans votre collection Postman
  2. Mettez en œuvre un script Pre-request dans cette collection

Étape 1: Étape 1

Étape 2: entrer la description de l'image ici

Voici le script de pré-requête :

if (pm.collectionVariables.get("IS_XDEBUG_ACTIVE") == "1") {
    pm.request.headers.add({
        key: "Cookie",
        value: "XDEBUG_SESSION"
    });
}

3voto

tsanecki Points 61

Attention !

xdebug >= 3.0 a modifié les paramètres dans php.ini. Après la mise à jour de xdebug, la plupart des réponses ici ne seront pas pertinentes.

Référez-vous à : https://xdebug.org/docs/upgrade_guide

Essentiellement, vous devez ajouter quelque chose comme ceci à votre php.ini :

xdebug.mode=develop,gcstats,coverage,profile,debug
xdebug.start_with_request=1
xdebug.idekey=PHPSTORM

2voto

RyanNerd Points 2695

Cela me rendait fou. Je viens de mettre à jour vers PHP 7.1 et xdebug qui fonctionnait ne fonctionnait plus. J'ai mis à jour le fichier xdebug.so (Linux) et php --version a indiqué que xdebug était bien chargé et fonctionnait. Mais lorsque j'utilisais Postman, le débogueur ne se déclenchait jamais.

Voici la solution. Si vous utilisez Apache comme serveur, vous devez activer les modules PHP 7.1 et redémarrer Apache : sudo service apache2 restart

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