Activer et désactiver le mode débogage dans Laravel

Activer et désactiver le mode débogage dans Laravel
Réponse rapide

Le mode débogage se règle avec APP_DEBUG dans le fichier .env : true en local, false en production, toujours. Contrôlez l’état réel avec php artisan about --only=environment. Si le changement ne prend pas effet, la configuration est en cache : lancez php artisan config:clear.

Le mode débogage décide de ce que voit un visiteur quand votre application plante : la trace complète avec le code source et les variables d’environnement, ou une page d’erreur neutre. C’est un réglage d’une ligne, mais c’est aussi l’une des fuites de données les plus courantes en production.

Article du parcours Développement web. Vérifié sur Laravel 13.30.1 avec PHP 8.4.25.

Activer et désactiver

Le réglage se fait dans le fichier .env, à la racine du projet, et nulle part ailleurs :

.env
APP_ENV=local
APP_DEBUG=true

Pour le désactiver, passez la valeur à false :

.env
APP_ENV=production
APP_DEBUG=false

Vérifiez l’état effectif sans écrire une seule ligne de code :

bash
php artisan about --only=environment
code
  Environment ........................................................ local
  Debug Mode ...................................................... ENABLED

C’est la seule vérification qui compte : elle affiche la valeur réellement utilisée par l’application, cache compris.

Le piège : la configuration en cache

Vous passez APP_DEBUG=false, vous rechargez, et les traces d’erreur s’affichent toujours. C’est presque toujours le cache de configuration.

Quand php artisan config:cache a été exécuté, Laravel écrit toutes les valeurs résolues dans bootstrap/cache/config.php et cesse complètement de lire le fichier .env. Le comportement a été mesuré :

Étape config('app.debug') env('APP_DEBUG')
APP_DEBUG=true, sans cache true true
après config:cache, puis passage à false dans .env true NULL
après config:clear false false

Deux enseignements. Le premier : après toute modification du .env sur un serveur où la configuration est en cache, il faut la régénérer.

bash
php artisan config:clear
# ou, en production, régénérer directement le cache
php artisan config:cache
env() renvoie NULL quand la configuration est en cache

C’est la conséquence la plus mal connue, et elle ne concerne pas que le débogage. Un appel à env('MA_CLE') ailleurs que dans un fichier de config/ renverra null dès que config:cache aura tourné. La règle est stricte : env() uniquement dans config/, et partout ailleurs config('fichier.cle').

Ce que contient config/app.php

La clé de configuration se contente de lire la variable d’environnement, avec false comme valeur de repli :

config/app.php
'debug' => (bool) env('APP_DEBUG', false),

Ne modifiez pas cette ligne. Elle est écrite pour que le comportement par défaut soit sûr : si APP_DEBUG est absent du .env, le mode débogage reste désactivé. Vérifié en supprimant la variable, config('app.debug') renvoie bien false.

Mettre la valeur en dur dans config/app.php a deux inconvénients : le fichier est versionné, donc le réglage part sur tous les environnements, et le .env devient trompeur.

Les valeurs acceptées suivent les règles de conversion de Laravel, mesurées ligne à ligne :

Dans le .env config('app.debug')
APP_DEBUG=true ou (true) ou 1 true
APP_DEBUG=false ou 0 false
APP_DEBUG=yes true
variable absente false

yes vaut true parce que la chaîne n’est pas reconnue comme un booléen et se retrouve castée. C’est une bonne raison de s’en tenir à true et false.

Pourquoi false en production n’est pas négociable

Avec APP_DEBUG=true, la page d’erreur affiche la trace d’appel, des extraits du code source et le contenu des variables d’environnement chargées. Un visiteur qui déclenche une erreur peut donc lire vos identifiants de base de données, vos clés d’API et la clé APP_KEY qui chiffre les sessions.

Il n’y a pas besoin de chercher : il suffit d’une URL qui provoque une exception. C’est la raison pour laquelle des applications Laravel se retrouvent compromises sans faille applicative particulière.

La configuration correcte d’un serveur de production, tel que celui monté dans l’installation de Laravel sur Debian, tient en trois lignes :

.env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://exemple.com

Puis, après déploiement :

bash
php artisan config:cache
php artisan about --only=environment   # contrôle : Debug Mode doit afficher OFF

Le même raisonnement vaut pour les formulaires publics, qu’il faut protéger contre les envois automatisés avant l’ouverture au public.

Les erreurs restent consultables, mais dans les journaux plutôt que dans le navigateur :

bash
tail -f storage/logs/laravel.log

Ce chemin se construit avec storage_path(), décrit dans les chemins de l’application.

Erreurs fréquentes

Le cache de configuration ignore le .env Après config:cache, Laravel ne lit plus le fichier .env. Toute modification exige config:clear ou une régénération du cache.
env() en dehors de config/ Dès que la configuration est en cache, env() renvoie NULL partout ailleurs. Utilisez config('fichier.cle').
Modifier config/app.php au lieu du .env Le fichier est versionné : le réglage part sur tous les environnements et le .env devient trompeur.
APP_DEBUG=yes vaut true Toute chaîne non reconnue comme booléen est castée à true. Tenez-vous à true et false.
APP_DEBUG=true en production La page d’erreur expose la trace, le code source et les variables d’environnement, dont les identifiants de base et l’APP_KEY.

ConfigurationLaravelPHP

Damien Flandrin Développeur web depuis 2010, créateur de Gekkode et d’Email Impact. Chaque article est testé sur un projet réel avant publication. Contact
Newsletter

Les nouveaux tests, tutoriels et projets, par e-mail.

Tests reproductibles, code versionné, résultats datés. Jamais de spam.