
De debugmodus regel je met APP_DEBUG in het bestand .env: true lokaal, false in productie, altijd. Controleer de werkelijke status met php artisan about --only=environment. Heeft de wijziging geen effect, dan staat de configuratie in cache: draai php artisan config:clear.
De debugmodus bepaalt wat een bezoeker te zien krijgt wanneer je applicatie crasht: de volledige stack trace met broncode en omgevingsvariabelen, of een neutrale foutpagina. Het is een instelling van één regel, en tegelijk een van de meest voorkomende datalekken in productie.
Artikel uit het leertraject Webontwikkeling. Gecontroleerd op Laravel 13.30.1 met PHP 8.4.25.
In- en uitschakelen
Je regelt dat in het bestand .env in de root van het project, en nergens anders:
APP_ENV=local
APP_DEBUG=trueOm hem uit te schakelen zet je de waarde op false:
APP_ENV=production
APP_DEBUG=falseControleer de werkelijke status zonder ook maar één regel code te schrijven:
php artisan about --only=environment Environment ........................................................ local
Debug Mode ...................................................... ENABLEDDat is de enige controle die telt: ze toont de waarde die de applicatie echt gebruikt, cache inbegrepen.
De valkuil: de configuratie in cache
Je zet APP_DEBUG=false, je herlaadt, en de stack traces verschijnen nog altijd. Bijna altijd is de configuratiecache de oorzaak.
Zodra php artisan config:cache is uitgevoerd, schrijft Laravel alle opgeloste waarden weg in bootstrap/cache/config.php en leest het het bestand .env helemaal niet meer. Dat gedrag is gemeten:
| Stap | config('app.debug') | env('APP_DEBUG') |
|---|---|---|
APP_DEBUG=true, zonder cache | true | true |
na config:cache, daarna in .env op false gezet | true | NULL |
na config:clear | false | false |
Twee lessen. De eerste: na elke wijziging van de .env op een server waar de configuratie in cache staat, moet je die cache opnieuw opbouwen.
php artisan config:clear
# of, in productie, de cache meteen opnieuw opbouwen
php artisan config:cacheDat is het minst bekende gevolg, en het raakt meer dan alleen de debugmodus. Een aanroep van env('MA_CLE') buiten een bestand in config/ geeft null terug zodra config:cache heeft gedraaid. De regel is streng: env() uitsluitend in config/, en overal elders config('fichier.cle').
Wat er in config/app.php staat
De configuratiesleutel doet niets anders dan de omgevingsvariabele uitlezen, met false als terugvalwaarde:
'debug' => (bool) env('APP_DEBUG', false),Wijzig die regel niet. Ze is zo geschreven dat het standaardgedrag veilig is: ontbreekt APP_DEBUG in de .env, dan blijft de debugmodus uit. Gecontroleerd door de variabele te verwijderen: config('app.debug') geeft inderdaad false terug.
De waarde hard in config/app.php zetten heeft twee nadelen: het bestand staat in versiebeheer, dus de instelling reist naar alle omgevingen mee, en de .env wordt misleidend.
De aanvaarde waarden volgen de conversieregels van Laravel, regel voor regel gemeten:
In de .env | config('app.debug') |
|---|---|
APP_DEBUG=true of (true) of 1 | true |
APP_DEBUG=false of 0 | false |
APP_DEBUG=yes | true |
| variabele ontbreekt | false |
yes levert true op omdat de string niet als boolean wordt herkend en dus wordt gecast. Een goede reden om het bij true en false te houden.
Waarom false in productie niet onderhandelbaar is
Met APP_DEBUG=true toont de foutpagina de stack trace, fragmenten van de broncode en de inhoud van de geladen omgevingsvariabelen. Een bezoeker die een fout uitlokt, leest dus je databasegegevens, je API-sleutels en de APP_KEY waarmee de sessies worden versleuteld.
Zoeken hoeft niet: één URL die een exception veroorzaakt, volstaat. Daarom raken Laravel-applicaties gecompromitteerd zonder dat er een echt lek in de code zit.
De juiste configuratie van een productieserver, zoals die is opgezet in de installatie van Laravel op Debian, past in drie regels:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://exemple.comEn daarna, na het deployen:
php artisan config:cache
php artisan about --only=environment # controle: Debug Mode moet OFF tonenDezelfde redenering geldt voor publieke formulieren, die je tegen geautomatiseerde inzendingen moet beschermen voordat je ze openstelt.
De fouten blijven raadpleegbaar, maar in de logs in plaats van in de browser:
tail -f storage/logs/laravel.logDat pad bouw je met storage_path(), beschreven in de paden van de applicatie.
Veelgemaakte fouten
config:cache leest Laravel het bestand .env niet meer. Elke wijziging vraagt om config:clear of om een nieuwe opbouw van de cache.env() overal elders NULL terug. Gebruik config('fichier.cle').

