
PrestaShop page blanche : diagnostiquer et corriger les erreurs 500 sans paniquer
Page blanche ou erreur 500 sur PrestaShop ? Mode debug, logs d'erreurs, arrêt d'un module en base et purge du cache : suivez ce protocole d'urgence pas à pas.
Comprendre l'origine d'un écran blanc ou d'une erreur 500 sur PrestaShop
L'affichage d'un écran blanc, couramment qualifié de White Screen of Death (WSOD), ou le renvoi d'un code d'état HTTP 500 Internal Server Error constitue la manifestation la plus abrupte d'une interruption d'exécution sur votre boutique e-commerce. Pour les développeurs et les entrepreneurs qui gèrent leurs propres systèmes, ce comportement ne doit jamais être perçu comme une fatalité imprévisible, mais comme un mécanisme de protection strict du moteur d'exécution PHP. Par défaut, sur un serveur de production, la directive PHP display_errors est configurée sur Off afin de ne pas divulguer publiquement la structure de vos fichiers, vos identifiants de base de données ou des secrets d'environnement. Lorsque l'interpréteur rencontre une condition bloquante non interceptée, il interrompt immédiatement le script et renvoie un corps de réponse vide ou une page générique d'erreur serveur.
Dans l'écosystème PrestaShop moderne (versions 1.7 et 8 reposant sur les composants du framework Symfony), plusieurs causes techniques sous-jacentes déclenchent cette rupture d'exécution :
- Erreur fatale PHP (Fatal Error) : Tentative d'instanciation d'une classe introuvable, appel à une fonction inexistante ou non-respect des types stricts à la suite d'une mise à jour de PHP ou d'un module tiers.
- Dépassement de la mémoire allouée (Memory Limit Exhaustion) : Épuisement de la directive
memory_limitde PHP lors de la génération d'un catalogue volumineux, de la compilation des templates Smarty ou de l'exécution d'un script d'import lourd. - Corruption du conteneur de dépendances ou du cache Symfony : Présence de métadonnées périmées ou de fichiers de compilation incomplets dans l'arborescence
var/cache/. - Conflit de surcharge de classe (Override) : Présence d'un fichier altéré dans le répertoire
override/dont la signature de méthode diffère de la classe parente du cœur de PrestaShop. - Rupture de connexion à la base de données : Saturation du pool de connexions MariaDB ou MySQL, verrous de tables ou identifiants incorrects dans le fichier d'environnement.
Pour intervenir efficacement sans détériorer l'état du serveur ni compromettre vos transactions, il est impératif d'adopter une démarche rationnelle : inspecter avant d'agir, isoler la cause exacte à l'aide des journaux système, puis corriger avec une précision chirurgicale.
Activer le mode debug dans defines.inc.php avec précaution
La première étape diagnostique consiste à contraindre PrestaShop à rendre explicites les messages d'erreur masqués. Lorsque le back-office est inaccessible, cette manipulation s'exécute directement sur le système de fichiers, via un accès SSH ou un client SFTP sécurisé. Le réglage central se situe dans le fichier config/defines.inc.php, à la racine de votre boutique.
Par défaut, la constante _PS_MODE_DEV_ est initialisée à false. La basculer à true active l'affichage immédiat des erreurs PHP, des avertissements (warnings), des notices, ainsi que de la barre d'outils de profilage Symfony (Debug Toolbar) sur PrestaShop 1.7 et PrestaShop 8. Consulter la documentation officielle du mode debug PrestaShop permet de mesurer l'impact de ce réglage sur l'environnement d'exécution.
Cependant, activer ce mode de manière globale sur une boutique ouverte au public présente un risque d'exposition d'informations sensibles (chemins absolus du serveur, traces d'appels SQL, versions exactes des paquets). Pour sécuriser votre diagnostic, conditionnez l'activation du mode debug à votre propre adresse IP publique, comme illustré dans l'extrait suivant :
/* config/defines.inc.php */
// Remplacement du bloc standard par une condition stricte sur votre IP
$allowed_ips = ['198.51.100.42']; // Remplacez par votre IP publique fixe
if (isset($_SERVER['REMOTE_ADDR']) && in_array($_SERVER['REMOTE_ADDR'], $allowed_ips, true)) {
define('_PS_MODE_DEV_', true);
} else {
define('_PS_MODE_DEV_', false);
}
Si vous intervenez au sein d'une configuration Docker Compose pour PrestaShop, vous pouvez également injecter cette variable d'environnement ou monter temporairement un fichier de configuration dédié afin d'éviter toute altération persistante sur le volume de production.
Analyser méthodiquement les logs d'erreurs : Nginx, Apache et PHP-FPM
L'activation du mode debug ne résout pas l'incident ; elle rend simplement visible l'exception levée. Si l'écran demeure blanc malgré la modification du fichier defines.inc.php (cas typique d'une erreur de syntaxe PHP ou d'une panne précoce survenue avant le chargement du noyau PrestaShop), la vérité se trouve nécessairement dans les journaux d'erreurs du système d'exploitation et des démons web.
Sur un serveur Linux configuré avec Nginx et PHP-FPM, deux fichiers de logs distincts doivent être scrutés en priorité via votre terminal :
- Le journal des erreurs de PHP-FPM : Selon votre distribution et la version de PHP installée, il se trouve généralement sous
/var/log/php8.1-fpm.logou au sein du dossier du pool applicatif/var/log/php-fpm/www-error.log. Il consigne les dépassements de mémoire (Allowed memory size exhausted), les timeouts de processus (execution timed out) et les plantages au niveau du binaire. - Le journal des erreurs du serveur web (Nginx ou Apache) : Accessible sous
/var/log/nginx/error.logou/var/log/apache2/error.log. Si Nginx renvoie un code 502 Bad Gateway ou 504 Gateway Timeout plutôt qu'une 500 pure, la cause provient directement de la communication avec le socket Unix ou le port TCP de PHP-FPM. - Les logs de l'application PrestaShop / Symfony : Situés dans
var/logs/(sur PrestaShop 1.7 et 8) ou dansapp/logs/. Le fichierprod.logoudev.logdétaille la trace d'appels complète (stack trace) des exceptions non capturées par le routeur Symfony.
Pour surveiller les écritures en temps réel pendant que vous reproduisez le problème sur votre navigateur, utilisez la commande suivante :
tail -n 100 -f /var/log/nginx/error.log /var/log/php8.1-fpm.log
Le tableau ci-dessous récapitule les signatures d'erreurs les plus fréquentes rencontrées sur les boutiques PrestaShop en production, leur interprétation technique et l'action corrective appropriée :
| Message d'erreur relevé | Fichier journal concerné | Origine technique | Action corrective immédiate |
|---|---|---|---|
Fatal error: Allowed memory size of X bytes exhausted |
PHP-FPM error.log | Dépassement du plafond de mémoire allouée au script. | Augmenter temporairement memory_limit dans php.ini (ex: 512M ou 1G) et recharger le démon FPM. |
Parse error: syntax error, unexpected ... |
Nginx error.log / PHP log | Incompatibilité de version PHP (ex: code PHP 8.1 exécuté sur PHP 7.4) ou fichier altéré lors d'un transfert SFTP. | Vérifier la version PHP active et remplacer le fichier corrompu par sa version saine issue du dépôt git. |
Fatal error: Declaration of OverrideClass::method() must be compatible with CoreClass::method() |
PHP log / dev.log | Surcharge (override) obsolète non alignée avec le cœur mis à jour de PrestaShop. | Désactiver temporairement le fichier incriminé dans override/classes/ ou override/controllers/ en le renommant. |
An exception occurred while executing 'SELECT ... FROM ps_...' |
var/logs/prod.log | Table MariaDB corrompue, colonne manquante après migration partielle ou droits insuffisants pour l'utilisateur SQL. | Exécuter une vérification/réparation SQL (CHECK TABLE / REPAIR TABLE) et contrôler le schéma de la base. |
FastCGI sent in stderr: "Primary script unknown" |
Nginx error.log | Mauvaise directive root dans le vhost Nginx ou problème de permissions sur le fichier index.php. |
Ajuster les chemins dans la configuration Nginx et s'assurer que l'utilisateur www-data peut lire le dossier. |
Désactiver d'urgence un module défaillant en base de données ou via le terminal
Dans plus de 70 % des cas constatés lors d'interventions sur des boutiques en panne, l'origine de l'écran blanc réside dans un module tiers défectueux, particulièrement après l'application d'un correctif ou lors de l'accrochage à un hook critique (comme displayHeader, actionDispatcher ou displayPaymentReturn). Si l'erreur bloque l'accès au tableau de bord, vous ne pouvez pas utiliser l'interface graphique pour désinstaller ce module.
Deux approches opérationnelles permettent de neutraliser immédiatement le composant perturbateur sans endommager les données de la boutique.
Méthode 1 : Désactivation ciblée dans la base de données relationnelle
Connectez-vous à votre serveur de base de données via le client CLI mysql ou un outil d'administration. La table ps_module (ou avec le préfixe configuré dans votre fichier parameters.php) répertorie l'ensemble des modules déclarés. Pour couper un module sans supprimer ses configurations métier, exécutez :
-- 1. Identifier le statut actuel du module
SELECT id_module, name, active FROM ps_module WHERE name = 'nom_du_module_defaillant';
-- 2. Désactiver le module en urgence
UPDATE ps_module SET active = 0 WHERE name = 'nom_du_module_defaillant';
-- 3. Désactiver les liaisons aux hooks pour garantir qu'aucune méthode ne soit appelée
UPDATE ps_hook_module hm
JOIN ps_module m ON m.id_module = hm.id_module
SET hm.id_shop = 0
WHERE m.name = 'nom_du_module_defaillant';
Méthode 2 : Neutralisation par renommage physique du dossier
Si la base de données est difficilement accessible ou si le module s'exécute dès le chargement du chargeur automatique Composer (autoloading), connectez-vous en SSH et renommez directement le répertoire du module au sein de l'arborescence modules/ :
cd /var/www/html/modules/
mv nom_du_module_defaillant nom_du_module_defaillant_disabled
PrestaShop ne trouvant plus le point d'entrée principal du module, il ignorera ses instructions lors du cycle d'initialisation, ce qui permettra à votre boutique de finaliser la génération du rendu HTML.
Sur un incident en production, l'erreur la plus coûteuse consiste à relancer des actions aveugles : vider les caches au hasard, réinstaller des modules ou redémarrer des conteneurs sans avoir capturé la trace exacte du problème. Chaque erreur 500 laisse une signature explicite dans les journaux. L'artisan-ingénieur ne devine pas : il lit l'exception, isole la ligne incriminée et applique le correctif chirurgical minimal pour rétablir le service avant d'engager le refactoring de fond.
Vider manuellement le cache et assainir les permissions du système de fichiers
PrestaShop s'appuie sur une double couche de cache : le compilateur de templates Smarty d'une part, et le conteneur de services Symfony d'autre part. Lors d'un incident ou d'une modification de code en urgence, le cache peut conserver des classes fantômes ou des fichiers compilés corrompus. Vider ce cache devient une condition préalable au retour à la normale.
Sur PrestaShop 1.7 et PrestaShop 8, le cache applicatif réside dans le dossier var/cache/. Sur les versions historiques PrestaShop 1.6, il se situe dans cache/smarty/compile/ et cache/smarty/cache/. Pour un déploiement PrestaShop sur VPS, l'intervention en ligne de commande reste la méthode la plus fiable :
# Accéder à la racine du projet
cd /var/www/html
# Sur PrestaShop 1.7 et 8 : suppression sécurisée des dossiers de compilation Symfony
rm -rf var/cache/prod/* var/cache/dev/*
# Sur PrestaShop 1.6 : vidage du cache de compilation Smarty (conserver index.php)
find cache/smarty/compile/ -mindepth 1 -not -name "index.php" -delete
find cache/smarty/cache/ -mindepth 1 -not -name "index.php" -delete
Une fois le cache purgé, la reconstruction automatique des conteneurs s'effectue dès la première requête HTTP. Si l'utilisateur sous lequel tourne PHP-FPM (souvent www-data sous Debian/Ubuntu ou nginx sous Alpine) ne possède pas les droits en écriture sur ces répertoires, un nouvel écran blanc se produira immédiatement. Rétablissez les permissions de propriété et de droits comme suit :
# Rétablir la propriété des fichiers vers l'utilisateur web
chown -R www-data:www-data var/cache/ var/logs/ img/ mails/ modules/ translations/ upload/ download/
# Appliquer les permissions de sécurité standards : 755 pour les dossiers, 644 pour les fichiers
find var/cache/ -type d -exec chmod 755 {} +
find var/cache/ -type f -exec chmod 644 {} +
Si votre infrastructure s'appuie sur une architecture multi-conteneurs pour PrestaShop, veillez à exécuter ces purges à l'intérieur du conteneur applicatif PHP ou à travers les commandes fournies par la console Symfony intégrée :
php bin/console cache:clear --env=prod --no-warmup
Protocole de sortie de crise et pérennisation des systèmes
Le rétablissement de l'affichage de votre boutique et de votre back-office ne marque pas la fin de votre intervention. Une réparation sous contrainte laisse souvent des portes ouvertes ou des fragilités silencieuses qui risquent de provoquer de nouveaux incidents lors du prochain pic de fréquentation.
Appliquez systématiquement la liste de contrôle suivante dès que le trafic reprend son cours normal :
- Désactiver impérativement le mode debug : Vérifiez que
_PS_MODE_DEV_est repositionné surfalsedansconfig/defines.inc.phpafin de protéger vos données sensibles et de restaurer les performances nominales du cache de production. - Assainir le registre des overrides : Si une classe surchargée a provoqué l'incident, supprimez le fichier
var/cache/prod/class_index.phpafin de forcer PrestaShop à réindexer uniquement les overrides valides, puis testez le comportement sur un environnement de recette isolé. - Ajuster les allocations de ressources système : Vérifiez dans votre configuration
php.iniquememory_limit(minimum recommandé : 512M) etmax_execution_time(au moins 120 secondes pour les tâches d'arrière-plan) sont dimensionnés en adéquation avec la taille de votre catalogue. - Configurer une rotation stricte des journaux : Assurez-vous que l'utilitaire
logrotateest actif sur vos répertoires/var/log/pour éviter que la saturation de l'espace disque n'entraîne un blocage brutal de MariaDB ou de PHP. - Consigner l'incident dans votre carnet de bord : Enregistrez la date, le commit ou la manipulation à l'origine du bogue, ainsi que la méthode exacte employée pour le résoudre. Une équipe technique qui comprend ses défaillances passées élimine durablement les risques de régression.
Pour aller au-delà du dépannage réactif et sécuriser durablement votre écosystème e-commerce, il est essentiel de connaître avec exactitude les goulets d'étranglement de votre infrastructure. Vous pouvez demander votre Note de Mesure personnalisée : un diagnostic technique complet couvrant les performances Core Web Vitals, la conformité de votre SEO technique, ainsi que la sécurité et l'architecture de votre boutique PrestaShop, réalisé sur-mesure par Alexandre Carette (#4467).
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Une question ?
Contactez-nous directement.
Discussion
Nos conseils liés à PrestaShop
PrestaShopMicro-caching Nginx PrestaShop : 1 000 req/s sans saturer
Découvrez comment configurer le micro-caching Nginx pour PrestaShop, absorber 1 000 requêtes par seconde et isoler strictement paniers et comptes clients.
PrestaShopOptimisation SQL PrestaShop : diviser le TTFB MariaDB par 3
Accélérez PrestaShop : découvrez les index MariaDB critiques, la purge des tables volumineuses et le réglage InnoDB pour diviser votre TTFB par trois.
PrestaShopLenteur PrestaShop : audit et optimisation technique
Résolvez la lenteur de PrestaShop avec une méthode d'ingénieur : diagnostic du TTFB, profiling SQL MariaDB, assainissement des hooks et gains mesurés.
