Erreur « Constant __PS_BASE_URI__ already defined » dans PrestaShop
Diagnostic et correction de l'erreur __PS_BASE_URI__ already defined dans PrestaShop. Causes fréquentes : malware, overrides, double inclusion config.
En bref : L'erreur « Constant __PS_BASE_URI__ already defined » signale une double inclusion du fichier de configuration PrestaShop. Les trois causes principales sont : une injection de malware (la plus dangereuse), un conflit d'overrides, ou une inclusion manuelle superflue dans un module ou script cron. Le diagnostic passe par la désactivation des overrides et l'audit des fichiers modifiés récemment.
Erreur « Constant __PS_BASE_URI__ already defined » dans PrestaShop : diagnostic complet
Comprendre l'erreur
Le message Notice: Constant __PS_BASE_URI__ already defined signifie que le fichier de configuration principal de PrestaShop (config/config.inc.php) est chargé deux fois au cours d'une même requête. La constante __PS_BASE_URI__ est définie lors de la première inclusion, et PHP lève une erreur lorsqu'une seconde tentative survient.
Cette erreur est rarement anodine. Elle révèle un problème structurel dans l'architecture de votre boutique, et dans un nombre significatif de cas, elle constitue le symptôme d'une compromission de sécurité.
Les trois causes principales
1. Injection de code malveillant (malware)
C'est la cause la plus fréquente et la plus dangereuse. Des scripts malveillants comme Bajatax ou ses variantes exploitent des failles dans certains modules tiers pour injecter du code PHP dans les fichiers système de PrestaShop.
Ces malwares incluent généralement config.inc.php une seconde fois pour accéder aux identifiants de base de données et aux informations clients. Le résultat :
- Envoi massif de spam depuis votre serveur
- Vol des données de paiement et des identifiants clients
- Double chargement de la configuration, déclenchant l'erreur `__PS_BASE_URI__`
#### Comment vérifier la présence d'un malware
# Rechercher des fichiers PHP modifiés récemment (dernières 48h)
find /var/www/html/ -name "*.php" -mtime -2 -type f
# Chercher des appels suspects dans les fichiers système
grep -rl "base64_decode\|eval(\|gzinflate\|str_rot13" \
--include="*.php" /var/www/html/
# Vérifier l'intégrité de config.inc.php
grep -n "include\|require" /var/www/html/config/config.inc.php
# Lister les fichiers PHP à la racine (souvent le point d'entrée du malware)
ls -la /var/www/html/*.php
Si vous trouvez des fichiers inconnus (x.php, cache.php, tmpchk.php) ou du code obfusqué dans vos fichiers système, votre boutique est compromise.
#### Procédure de nettoyage
- **Mettre le site en maintenance** immédiatement
- **Sauvegarder l'état actuel** (pour analyse forensique)
- **Comparer chaque fichier** avec les sources officielles de votre version PrestaShop :
- **Supprimer tout code injecté** et restaurer les fichiers originaux
- **Identifier et supprimer le module vulnérable** à l'origine de la faille
- **Changer tous les mots de passe** (base de données, back-office, FTP, hébergeur)
- **Mettre à jour PrestaShop** vers la dernière version stable
- Des derniers patchs de sécurité
- De Symfony 6.x et de son système de routing sécurisé
- De la compatibilité PHP 8.1+ avec ses améliorations de sécurité natives
- Vérifiez qu'il provient de la marketplace officielle ou d'un éditeur reconnu
- Inspectez le code source à la recherche d'inclusions `config.inc.php` superflues
- Supprimez les modules inutilisés (ne pas seulement les désactiver)
# Télécharger la version propre correspondante
wget https://github.com/PrestaShop/PrestaShop/releases/download/8.1.0/prestashop_8.1.0.zip
# Comparer les fichiers critiques
diff -r /var/www/html/classes/ /tmp/prestashop-clean/classes/
diff /var/www/html/config/config.inc.php /tmp/prestashop-clean/config/config.inc.php
2. Conflit d'overrides
Les overrides PrestaShop permettent de surcharger les classes et contrôleurs du cœur. Un override mal écrit peut provoquer une double inclusion du fichier de configuration.
#### Diagnostic rapide
Désactivez temporairement les overrides pour confirmer si l'un d'eux est en cause :
// Dans config/defines.inc.php, ajouter :
define('_PS_MODE_DEV_', true);
// Pour désactiver tous les overrides :
define('_PS_DISABLE_OVERRIDES_', true);
Si l'erreur disparaît avec les overrides désactivés, réactivez-les un par un pour identifier le coupable.
#### Structure correcte d'un override
Un override ne doit jamais inclure config.inc.php manuellement. Voici la structure attendue :
<?php
// override/classes/Cart.php — CORRECT
class Cart extends CartCore
{
// Vos surcharges ici
// Le fichier de config est déjà chargé par l'autoloader
}
Erreur classique à éviter :
<?php
// ❌ INCORRECT — provoque l'erreur __PS_BASE_URI__
include(dirname(__FILE__).'/../../config/config.inc.php');
class Cart extends CartCore
{
// ...
}
Sur PrestaShop 8.x, pensez à regénérer le fichier d'index des classes après toute modification d'override :
Back-office → Paramètres avancés → Performances → Vider le cache
Ou en ligne de commande :
php bin/console cache:clear
3. Double inclusion dans un module ou un script personnalisé
Certains modules ou scripts cron incluent explicitement config.inc.php alors qu'il est déjà chargé par le bootstrap de PrestaShop.
#### Inclusion correcte pour un script autonome
Si vous développez un script cron ou une API qui tourne en dehors du contexte PrestaShop :
<?php
// cron/mon_script.php — méthode sûre
if (!defined('__PS_BASE_URI__')) {
require_once dirname(__FILE__) . '/../config/config.inc.php';
}
// Votre code ici
Cette vérification conditionnelle empêche la double définition de la constante.
#### Dans un module PrestaShop
Un module correctement structuré n'a jamais besoin d'inclure config.inc.php. Le framework le charge automatiquement :
<?php
// modules/monmodule/monmodule.php
if (!defined('_PS_VERSION_')) {
exit;
}
class MonModule extends Module
{
// config.inc.php est déjà chargé, inutile de l'inclure
}
Prévention : sécuriser votre boutique
Maintenir PrestaShop à jour
Les anciennes versions (1.5.x, 1.6.x) ne reçoivent plus de correctifs de sécurité. La migration vers PrestaShop 8.x est fortement recommandée pour bénéficier :
Auditer les modules tiers
Les modules tiers sont le vecteur d'attaque numéro un sur PrestaShop. Avant d'installer un module :
Surveiller l'intégrité des fichiers
Mettez en place un script de surveillance :
#!/bin/bash
# integrity-check.sh — à exécuter via cron quotidiennement
CHECKSUM_FILE="/root/prestashop_checksums.md5"
ALERT_EMAIL="admin@votreboutique.com"
if [ ! -f "$CHECKSUM_FILE" ]; then
find /var/www/html -name "*.php" -exec md5sum {} \; > "$CHECKSUM_FILE"
echo "Checksums initiaux générés."
else
CHANGES=$(md5sum --check "$CHECKSUM_FILE" 2>/dev/null | grep FAILED)
if [ -n "$CHANGES" ]; then
echo "$CHANGES" | mail -s "[ALERTE] Fichiers PHP modifiés" "$ALERT_EMAIL"
fi
fi
Résumé des actions par cause
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

Alexandre Carette
Expert PrestaShop & Architecture E-commerce
Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.