Docker simplifie beaucoup de problématiques d’environnement pour les développeurs.
Quand la configuration de Docker est correcte, un développeur peut lancer un projet rapidement
sans avoir à installer la bonne version de PHP, de la base de données, etc.
Malheureusement, cela complexifie aussi la communication entre ce qui tourne sur votre système hôte (ex : Windows) et les services nécessaires au projet (typiquement : PHP).
Voici comment configurer PHPStorm pour utiliser le débogage pas à pas d’XDebug, quand PHP est dockerisé.
Prérequis
PHP avec xDebug
Avant de parler de débogage pas à pas, il faut déjà qu’XDebug soit installé dans votre image docker. Voici un exemple d’image Docker avec PHP 8.4 et XDebug :
FROM php:8.4-fpm-alpine3.20
# Paramétrage du chemin vers les sources dans le conteneur
ENV MOUNT_DIR /srv/php
RUN mkdir -p ${MOUNT_DIR}
WORKDIR ${MOUNT_DIR}
# Installation d’XDebug
RUN install-php-extensions xdebug
COPY config/xdebug.ini $PHP_INI_DIR/conf.d/
Elle utilise ce fichier de config xdebug.ini
(dans le répertoire config/
) qui sera injecté dans l’image :
;config/xdebug.ini
xdebug.mode = debug,develop,profile
xdebug.start_with_request = trigger
xdebug.client_host = host.docker.internal
On peut builder l’image en local avec une commande du type :
docker build . -t my-group/my-image
Débogage pas à pas
Objectif
Dans l’exemple qui suit, on supposera qu’on souhaite déboguer le fichier src/Controller/TestController.php
, lorsqu’on
accède à la page http://localhost:8000/test.
L’exemple utilise Symfony, mais c’est la même chose pour un autre contexte PHP. C’est bien un fichier
index.php
qui est exécuté ici, et il se charge ensuite d’appeler la méthode number()
du fichier
TestController.php
.
Notez le point rouge dans la marge à gauche (l. 18). Il représente un point d’arrêt : là où vous souhaitez arrêter
l’exécution pour déboguer.
Pour ajouter un point d’arrêt, cliquez dans la marge à gauche de la ligne de code juste avant laquelle vous souhaitez
arrêter l’exécution pour déboguer.
Ici, l’exécution s’arrêtera donc juste avant d’exécuter la ligne 18.
Configuration
Dans PHPStorm, on peut activer le débogage pas à pas en cliquant sur le bouton « téléphone rouge », qui devient vert quand il est activé (aussi disponible en bas du menu Run : Start Listening for PHP Debug Connections).
Mais avant, il faut cliquer sur la liste déroulante Current file à côté, puis sur Edit Configurations....
Nouvelle configuration de Run
Dans la fenêtre de configuration :
- Cliquez sur le bouton Add
- Sélectionnez PHP Remote debug
- Nommez la configuration (ex :
Docker
)
- Cliquez sur le lien Validate
- Sélectionnez le bouton radio Output phpinfo()
- Créez un fichier php contenant uniquement
phpinfo();
- Affichez-le dans votre navigateur et copiez la source de la page (via
Ctrl+U
) - Collez le code HTML dans le champ texte de la fenêtre de configuration
- Cliquez sur le bouton Validate.
PHPStorm va valider une série d’éléments et indiquer si XDebug est bien opérationnel :
- Cliquez sur le bouton Cancel.
Extension de navigateur
Pour simplifier le débogage, vous pouvez installer une extension de navigateur, qui ajoutera une variable dans le header des requêtes, pour indiquer au serveur qu’on souhaite utiliser le débogage pas à pas.
Il en existe plusieurs, comme Xdebug Helper.
- Pour Chrome : https://chromewebstore.google.com/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
- Pour Firefox : https://addons.mozilla.org/fr/firefox/addon/xdebug-helper-for-firefox/
Elles fonctionnent toutes plus ou moins de la même manière, en ajoutant un bouton pour activer/désactiver le débogage :
Débogage
- Cliquez sur le bouton « téléphone rouge » dans PHPStorm pour activer le débogage
- Cliquez sur le bouton « insecte » (ajouté par l’extension) dans votre navigateur pour activer le débogage
- Appelez votre page à déboguer.
La page devrait rester bloquée en cours de chargement, et PHPStorm devrait afficher une fenêtre indiquant qu’il a capté un script à déboguer :
- Cliquez sur le bouton Accept
Normalement, rien ne se passe et la page s’affiche normalement. PHPStorm affiche un message d’alerte, car il n’a pas réussi à faire le lien entre la requête et le fichier PHP concret à déboguer :
- Cliquez sur le lien PHP|Servers dans le message (ou recherchez cette configuration depuis la fenêtre de Settings globale de PHPStorm)
- Créez un nouveau server (ex : nommé
localhost
). - Par défaut, seulement le répertoire contenant le fichier
index.php
est mappé. Il faut ajouter le répertoire racine de votre application PHP.
Dans le tableau, la colonne de gauche indique le chemin physique de votre application sur votre machine ( probablement un répertoire WSL si vous êtes sous Windows). Celle de droite indique le chemin de l’application à l’intérieur de votre conteneur docker (/srv/php
correspond au chemin indiqué dans leDockerfile
précédent).
Normalement, tout est opérationnel. Vous pouvez recharger votre page de test et l’exécution devrait s’arrêter au niveau de votre point d’arrêt.
Dans la section basse de votre IDE, apparait la variable locale $randomNumbers
, avec sa valeur courante :