Débogage de code PHP : techniques et outils pour les pros

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi le débogage est un superpouvoir du développeur

\n\n

Avez-vous déjà passé une nuit à fixer votre écran sans comprendre pourquoi votre site PHP affichait une page blanche de la mort ? Ou pire encore, des chiffres incorrects dans un rapport ? Félicitations, vous avez rencontré le débogage. Beaucoup de débutants craignent ce mot, pensant que le débogage de code PHP est réservé à une élite de gourous. En réalité, c'est simplement une compétence que l'on peut et doit entraîner.

\n\n

Dans cet article, nous ne nous contenterons pas d'énumérer des fonctions. Nous analyserons des scénarios réels : du simple var_dump() à la configuration de Xdebug dans un IDE. Vous apprendrez à transformer le processus de recherche d'erreurs en une routine structurée, et non en une divination. C'est parti !

\n\n

1. Les classiques : var_dump et print_r

\n\n

La façon la plus simple de déboguer PHP est d'insérer var_dump($variable) à un endroit suspect. Mais il y a un détail : tout le monde ne le fait pas correctement.

\n\n

Le bon var_dump

\n

Beaucoup écrivent ceci :

\n
var_dump($user);
\n

Et obtiennent un affichage confus. Il est préférable de formater la sortie :

\n
echo '<pre>';\nvar_dump($user);\necho '</pre>';\ndie(); // arrêter l'exécution pour ne pas perturber le reste de l'affichage
\n\n

Et pour les tableaux et objets, print_r() avec le drapeau true est plus pratique pour conserver le résultat dans une chaîne :

\n
$data = print_r($users, true);\nfile_put_contents('debug.log', $data, FILE_APPEND);
\n\n

Conseil : Ne laissez jamais de var_dump en production. Utilisez un débogage conditionnel :

\n
if (defined('DEBUG_MODE') && DEBUG_MODE) {\n    var_dump($variable);\n}
\n\n

2. La journalisation : votre meilleur ami en production

\n\n

Lorsque le site est déjà sur le serveur, vous ne pouvez pas simplement afficher l'erreur à l'écran. C'est là que la journalisation PHP entre en jeu. La fonction intégrée error_log() est la base.

\n\n

Comment configurer error_log

\n

Dans le fichier php.ini, indiquez :

\n
error_reporting = E_ALL\ndisplay_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log
\n\n

Désormais, toutes les erreurs, y compris les avertissements, seront écrites dans un fichier. Et dans le code, vous pouvez faire ceci :

\n
if ($result === false) {\n    error_log("Erreur de requête à la BD : " . $db->error, 3, '/var/log/myapp.log');\n    // 3 — signifie écriture dans un fichier, et non dans syslog\n}
\n\n

Approche moderne : Monolog

\n

Pour les projets sérieux, utilisez la bibliothèque Monolog. Elle peut écrire dans des fichiers, dans Slack, dans une base de données et même dans Telegram. Exemple de connexion :

\n
use Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('my_app');\n$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));\n$log->warning('Un utilisateur a tenté de se connecter sans droits', ['user_id' => 123]);
\n\n

3. Xdebug : le moteur de débogage réactif

\n\n

Si vous n'avez pas encore installé Xdebug, vous perdez du temps. Ce n'est pas qu'un simple outil — c'est un réacteur dorsal pour le développeur. Il permet de placer des points d'arrêt (breakpoints), de voir les valeurs des variables en temps réel et même de profiler le code.

\n\n

Installation et configuration

\n

Installez via le gestionnaire de paquets :

\n
pecl install xdebug\n# ou pour Ubuntu :\nsudo apt install php-xdebug
\n\n

Ajoutez dans php.ini :

\n
zend_extension=xdebug.so\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003
\n\n

Configurez maintenant votre IDE. Dans PhpStorm, cela se fait en deux clics : configurez l'interpréteur PHP et cliquez sur "Start Listening for PHP Debug Connections".

\n\n

Comment ça fonctionne dans la pratique

\n

Placez un point d'arrêt (cercle rouge) sur la ligne de code suspecte. Lancez le script dans le navigateur avec le paramètre ?XDEBUG_SESSION_START=1.

Blogs

Book Recommendations