Christophe Meneses - Développeur
  • Liste des articles
  • Contact
  • Linkedin
  • Github
  • Flux RSS
Tous les articles PHP / PhpStorm / Xdebug Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm
PHP PhpStorm Xdebug

Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Publié le 10/05/2015. Dernière mise à jour le 06/01/2018.

Si vous utilisez les var_dump() et echo() pour déboguer vos applications PHP, il va falloir changer vos mauvaises habitudes ! Cet article vous explique pas à pas, comment mettre en place le débogage en PHP grâce à l'extension Xdebug. Attention dans cet article, je n'explique pas le principe du débogage ni de comment fonctionne l'extension Xdebug. On se concentre uniquement sur la mise en place du débogage. Si vous voulez en savoir plus, je vous invite à aller lire la documentation officielle.

Prérequis

Bien évidemment, l'extension PHP Xdebug doit être installée. Pour vérifier si l'extension est déjà installée dans votre environnement, tapez la commande :

php --ri xdebug

Si la commande indique que l'extension n'est pas présente, il faut alors l'installer. Je vous laisse faire, ce n'est pas bien compliqué.

Configuration de l'extension Xdebug

Vous devez ensuite modifier un des fichiers de configuration de PHP pour paramétrer Xdebug. Sur Ubuntu, il existe un fichier de configuration spécifique pour Xdebug. Vous pouvez le trouver à l'adresse suivante : /etc/php5/apache2/conf.d/20-xdebug.ini. Il faut rajouter les lignes ci-dessous :

xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_port=9000

xdebug.remote_enable permet d'activer le débogueur Xdebug sur le serveur.
xdebug.remote_connect_back permet d'indiquer à Xdebug qu'il doit essayer de se connecter au client qui a effectué une requête HTTP. Pour cela, il utilise l'IP contenu dans la variable $_SERVER['REMOTE_ADDR'].
xdebug.remote_port permet d'indiquer le port d'écoute du client. On garde la valeur par défaut qui vaut 9000.

A la place de xdebug.remote_connect_back, vous pouvez utiliser xdebug.remote_host. Ce paramètre permet d'indiquer directement l'IP du client. Vous pouvez ainsi contrôler qui peut se connecter à votre serveur en mode débogage.

Une fois les lignes ajoutées, redémarrez Apache. Sur Ubuntu :

sudo service apache2 restart

Si vous faites un phpinfo(), la configuration de Xdebug devrait avoir changé maintenant :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Activation du débogueur de Xdebug

Pour activer le débogueur sur le serveur, il est nécessaire de créer un cookie au niveau du client. Ce cookie doit porter le nom spécifique XDEBUG_SESSION et doit contenir une clé. Si vous voulez plus de détails, vous pouvez lire la documentation sur le site officiel de Xdebug.

La création du cookie peut se faire manuellement mais il existe beaucoup d'extensions de navigateurs qui peuvent faire ce boulot. Installez donc l'extension de votre choix. Personnellement sur Firefox, j'utilise l'extension Xdebug-ext

Allez dans Outils >> Modules complémentaires, puis dans l'onglet Extensions. Au niveau de l'extension Xdebug-ext, cliquez sur le bouton Préférences :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Dans la nouvelle fenêtre qui s'ouvre, indiquez la clé du cookie, par exemple phpstorm-xdebug :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Ensuite pour créer le cookie, vous n'avez plus qu'à cliquer sur le nouveau bouton qui est apparu en haut à droite de la fenêtre de Firefox :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Quand vous cliquez dessus, l'icône devient rouge :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Configuration de l'IDE

Dans cette partie, je vais décrire la procédure à suivre pour PhpStorm mais si vous utilisez un autre IDE, il faut suivre la même logique.

Dans un premier temps, il Il est nécessaire de demander à son IDE d'écouter les connexions entrantes. Pour cela, cliquez sur l'icône en haut à droite de la fenêtre de PhpStorm. Vous pouvez également utiliser le menu : Run >> Start Listening For PHP Debug Connections :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

L'icône change alors de couleur :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Il faut ensuite indiquer à son IDE qu'il va être contacté par Xdebug. Ouvrez la fenêtre File >> Settings. Allez dans Languages & Frameworks >> PHP >> Debug. Vérifiez que le port est bien égal à 9000 et que les connexions externes sont bien acceptées :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Ensuite allez dans Languages & Frameworks >> PHP >> Server. Il faut créer un nouveau serveur en indiquant l'IP et le port de votre serveur. Dans la liste des débogueurs, il faut indiquer Xdebug. Il peut être nécessaire également de faire un mapping entre l’arborescence du projet dans votre IDE et l'arborescence du projet sur le serveur. Ici dans l'exemple présenté, il n'est pas nécessaire de le faire car le client et le serveur sont sur la même machine (localhost) et partage la même arborescence :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Lancement du débogage

Dans l'IDE, ajoutez un point d'arrêt dans le code de votre site :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Dans votre navigateur, activez le cookie grâce à l'extension installée au début de cet article, puis allez sur le site hébergé par votre serveur. L'IDE va prendre le focus en vous indiquant qu'il y a une connexion entrante :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Acceptez, vous pourrez alors déboguer pas à pas et voir le contenu des différentes variables dans le nouvel espace prévu à cet effet :
Image de l'article : Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Et si je veux déboguer un script qui est lancé en ligne de commande ?

Bonne nouvelle, c'est également possible. Précédemment, nous avons configurer Xdebug en modifiant les fichiers de configuration de PHP spécifiques à Apache. Ici, il faut ajouter la même configuration mais cette fois-ci en modifiant les fichiers de configuration PHP spécifiques à la ligne de commande (CLI).

Ensuite il suffit de créer une variable d'environnement avant d'exécuter son script. Elle contient le nom de la clé créée au début de cette article, ce qui permet d'activer le débogage. Sur Linux :

export XDEBUG_CONFIG="idekey=phpstorm-xdebug"
php nom_du_script.php

Si vous êtes sur Windows :

set XDEBUG_CONFIG="idekey=phpstorm-xdebug"
php nom_du_script.php

Cette méthode fonctionne si vous codez et exécutez le script sur la même machine. Si vous codez sur votre machine locale et que vous voulez exécutez le script sur une autre machine via SSH par exemple, alors il faut suivre la méthode un peu plus complexe ci-dessous :

1) Il faut toujours créer la variable d'environnement XDEBUG_CONFIG, mais cette fois-ci, il faut donner en plus l'IP de la machine où vous codez. Cela nous donne :

export XDEBUG_CONFIG="idekey=phpstorm-xdebug remote_host=xxx.xxx.xxx.xxx"

2) Il y a ensuite une étape supplémentaire. Il faut créer une autre variable d'environnement nommée PHP_IDE_CONFIG qui va permettre à PhpStorm de savoir avec quel serveur il doit communiquer. Normalement dans la partie Configuration de l'IDE situé plus haut dans cet article, vous avez configuré un serveur en lui donnant un nom (fenêtre Settings, partie Languages & Frameworks >> PHP >> Server). Il faut reprendre ce nom et l'assigner à cette variable. Par exemple si le serveur s'appelle mon.serveur.dev, cela nous donne :

export PHP_IDE_CONFIG=serverName=mon.serveur.dev

3) Vous pouvez maintenant exécuter le script sur le serveur :

 php nom_du_script.php

Si tout est OK, le débogage doit se lancer dans PhpStorm.

Version

Cet article a été testé avec :

PHP : 5.6.
PhpStorm: 8.0
Xdebug : 2.2.6
Ubuntu : 15.04
Début de l'article

Tous les articles PHP / PhpStorm / Xdebug Déboguer en PHP avec l'extension Xdebug et l'IDE PhpStorm

Liste des articles par catégorie

  1. Tous 124
  2. Apache2
  3. APC1
  4. Assetic2
  5. Bash2
  6. CentOS9
  7. Composer6
  8. CSS1
  9. Debian1
  10. Deployer1
  11. Design Pattern11
  12. Docker6
  13. Doctrine14
  14. Elasticsearch3
  15. Git6
  16. Google Charts1
  17. Hardware1
  18. Hébergement1
  19. JavaScript1
  20. jQuery4
  21. Kibana2
  22. Logstash1
  23. Machine Learning1
  24. MariaDB2
  25. Memcached2
  26. MySQL3
  27. Nginx2
  28. Panther3
  29. PHP59
  30. PHP_CodeSniffer1
  31. PHP-FPM2
  32. PhpMyAdmin1
  33. PhpStorm3
  34. PHPUnit6
  35. PostgreSQL2
  36. RabbitMQ2
  37. SQL1
  38. SVN4
  39. Sybase ASE1
  40. Symfony56
  41. Twig3
  42. Ubuntu14
  43. Vue.js2
  44. Vuex1
  45. Webpack Encore1
  46. Xdebug5

Derniers articles publiés

PHP
Différence entre les mots clés self et static dans le langage PHP

Symfony / Docker / Nginx
Migrer un projet Symfony du protocole HTTP 1.1 au protocole HTTP 2

Vue.js
Utiliser un filtre Vue.js directement dans le JavaScript

PHP / Symfony
Supprimer les messages de dépréciation de type : The "sensio_framework_extra.routing.loader.annot_*" service is deprecated since version 5.2

Symfony / RabbitMQ
Exemple d'utilisation du composant Messenger pour envoyer des emails en asynchrone avec RabbitMQ

PHP Symfony MariaDB HTML5 CSS3 JavaScript Bootstrap

© 2014 - 2019 réalisé par Christophe MENESES