Article
Démarrer avec xDebug
Dans cet article, on va voir comment installer et configurer Xdebug pour permettre l'ajout de breakpoints dans son code PHP.
Installation
Vérifier si Xdebug est installé avec sa version de PHP
Via la console
php -v
Vous devez alors récupérer les informations sur la version de PHP utilisée actuellement. Par exemple:
PHP 7.2.18 (cli) (built: May 2 2019 13:03:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
with Zend OPcache v7.2.18, Copyright (c) 1999-2018, by Zend Technologies
L’important est d’avoir l’information with Xdebug vX.X.X
.
Via un fichier php
<?php phpinfo();
Il faut ensuite chercher dans la liste des extensions (classées par ordre alphabétique).
Installer Xdebug sur Mac
Avec MAMP
Xdebug est déjà inclus, il n’y a rien à faire ! ;)
Avec Homebrew
Pour voir si une version de PHP est installée via Homebrew :
brew list
La commande va lister toutes les formules installées, il faut alors chercher celles qui concernent php:
- php56
- php70
- etc.
Depuis Homebrew 1.5, les formules PHP sont sous la forme php@X.X (ex : php@7.2). Pour les installer il faut de faire :
brew install php@7.2
Il est également possible d'installer directement la dernière version avec :
brew install php
Si vous avez déjà une version de PHP d'installée avec Homebrew, il faut changer le lien du $PATH :
brew unlink phpXX # votre version actuelle
brew link php@X.X --force # la nouvelle version installée
L'installation d'Xdebug n'est plus gérée par Homebrew, il faut utiliser PECL pour les extensions PHP maintenant. Cette CLI est inclut dans la formule PHP.
Il faut dans un premier temps mettre à jour la liste des canaux utilisés :
pecl update-channels
On peut ensuite installer Xdebug :
pecl install xdebug
Si ce n'est pas fait automatiquement, il faut activer l'extension dans le fichier php.ini :
zend_extension="/usr/local/php/modules/xdebug.so"
Pour Homebrew < 1.5.0
Chaque formule représente une version de php. Si aucune n’est présente, il suffit d’installer la version de son choix avec :
brew install phpXX
La commande ne va probablement pas marcher la première fois et va vous demander d’ajouter homebrew/php
à votre liste de « tap » puis recommencer l’install :
brew tap homebrew/php
brew install phpXX
Si ce n’est pas bon, il faut vérifier son $PATH. Si c’est bon, il nous reste à installer Xdebug.
brew install phpXX-xdebug
De la même façon, on peut installer facilement de nombreuses extensions PHP, pour avoir la liste complète :
brew search phpXX
Installer Xdebug sur Windows
Avec WAMP
Xdebug est déjà inclus, il n’y a rien à faire ! ;)
A la main
N’étant pas expert Windows, je ne peux pas vous expliquer comment y installer PHP. Chocolatey est une piste à explorer :
https://chocolatey.org/
Xdebug dispose de versions pré-compilées pour Windows et propose un assistant pour vous aider à choisir la bonne version. L’assistant :
https://xdebug.org/wizard.php
La liste des versions-précompilées :
https://xdebug.org/download.php
Installer Xdebug sur Linux
L’assitant d’Xdebug est là pour vous aider :
https://xdebug.org/wizard.php
Configuration
Localiser ses fichiers php.ini
Pour savoir où se situe vos fichiers .ini :
php --ini
Vous obtiendrez par exemple :
Configuration File (php.ini)
Path: /usr/local/etc/php/5.6
Loaded Configuration File: /usr/local/etc/php/5.6/php.ini
Scan for additional .ini files in: /usr/local/etc/php/5.6/conf.d Additional .ini files parsed: /usr/local/etc/php/5.6/conf.d/ext-intl.ini,
/usr/local/etc/php/5.6/conf.d/ext-mongo.ini, /usr/local/etc/php/5.6/conf.d/ext-opcache.ini, /usr/local/etc/php/5.6/conf.d/ext-ssh2.ini, /usr/local/etc/php/5.6/conf.d/ext-xdebug.ini
Si vous ne disposez pas de fichiers spécifiques pour vos extensions, c’est que toute la configuration est à mettre dans php.ini
.
Autoriser le debug distant
Ici, distant est à prendre dans le sens « par une autre application », en l’occurence un IDE ou autre.
On va ajouter (ou modifier si les variables sont déjà définies) la ligne suivante :
xdebug.remote_enable=1
De cette façon, on lui dit d’accepter les debug distants, provenant uniquement de l’ip 127.0.0.1. Par défaut, les valeurs suivantes sont pré-configurées (et pleins d’autres) et il n’y a pas besoin de les ajouter dans le fichier .ini :
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_handler=dbgp
Vérifier la disponibilité du port 9000
Pour qu’un IDE ou un debugger réagisse aux informations provenant d’Xdebug, il doit écouter le 9000 et pour cela, le port doit être disponible.
Sur Windows
netstat -ano | find "9000"
Sur Mac / Linux
lsof -i tcp:9000
Si le port n’est pas libre, il faut quitter manuellement l’application responsable (ou la kill / killall).
Connexion avec un IDE / debugger
Cette partie va grandement dépendre en fonction du logiciel utilisé mais les étapes restent globalement les mêmes pour tous. Il vous faut un serveur PHP en marche avec vos fichiers accessibles en HTTP :
- soit via MAMP ou autre
- soit via le serveur inclut à php
php -S 127.0.0.1:5555
Une fois cela fait, vous devez ajouter un breakpoint dans votre code à l’emplacement de votre choix ou cocher une case dans les options de votre debugger « Break on first line of execution ».
Si l’IDE / le debugger vous propose de saisir une IDE KEY, choisissez en une ou utilisez celle par défaut (souvent c’est le nom du programme, PHPSTORM pour PhpStorm). Il faut juste se la noter pour plus tard. On peut alors mettre en marche son debugger (via un bouton en forme d’insecte en général), s’il ne le fait pas automatiquement.
Nous avons donc :
- un serveur php lancé
- un debugger lancé
Pour vérifier que le debugger est en route, on peut vérifier qu’il écoute bien le port 9000 :
Sur Windows : netstat -ano | find "9000"
Sur Mac / Linux: lsof -i tcp:9000
Si ce n’est pas le cas, il y a un problème au niveau de la configuration du debugger / IDE.
Se lancer à l’aventure
Après toute cette configuration, nos efforts vont enfin payer. On peut accéder à nos scripts normalement sans debug en HTTP :
http://127.0.0.1:5555
Pour activer le debug, il suffit d’ajouter un paramètre GET :
http://127.0.0.1:5555/?XDEBUG_SESSION_START=PHPSTORM
Si l’on a fourni une IDE KEY à notre IDE / Debugger, il faut utiliser la même. Sinon, on peut mettre 1.