PrestaShop page blanche : corriger l'erreur 500
Performance

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.

Publié le 1 octobre 2026 11 min de lectureAlexandre Carette

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_limit de 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 :

  1. 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.log ou 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.
  2. Le journal des erreurs du serveur web (Nginx ou Apache) : Accessible sous /var/log/nginx/error.log ou /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.
  3. Les logs de l'application PrestaShop / Symfony : Situés dans var/logs/ (sur PrestaShop 1.7 et 8) ou dans app/logs/. Le fichier prod.log ou dev.log dé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.

— Alexandre Carette

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é sur false dans config/defines.inc.php afin 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.php afin 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.ini que memory_limit (minimum recommandé : 512M) et max_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 logrotate est 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.

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Architecte e-commerce, SEO technique, AIO/GEO

Consultant freelance e-commerce et SEO IA (AIO/GEO), basé à Metz. Architecte PrestaShop Headless, SEO technique, visibilité dans les moteurs conversationnels (ChatGPT, Perplexity, Gemini). Zéro sous-traitance : un seul interlocuteur.

Discussion

Votre avis sur cet article

Les commentaires sont modérés avant publication. Votre email ne sera jamais affiché.

0 / 2000

En publiant, vous acceptez que votre nom et commentaire soient affichés publiquement.