🐛 DebugIntermédiaire PS 1.5 PS 1.6 PS 1.7 PS 8.x

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.

Publié le 21 mars 2026 5 min de lecture Alexandre Carette

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

  1. **Mettre le site en maintenance** immédiatement
  2. **Sauvegarder l'état actuel** (pour analyse forensique)
  3. **Comparer chaque fichier** avec les sources officielles de votre version PrestaShop :
  4. 
    # 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
    
    1. **Supprimer tout code injecté** et restaurer les fichiers originaux
    2. **Identifier et supprimer le module vulnérable** à l'origine de la faille
    3. **Changer tous les mots de passe** (base de données, back-office, FTP, hébergeur)
    4. **Mettre à jour PrestaShop** vers la dernière version stable
    5. 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 :

      • 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

      Auditer les modules tiers

      Les modules tiers sont le vecteur d'attaque numéro un sur PrestaShop. Avant d'installer un module :

      • 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)

      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

      CauseAction immédiateAction long terme Malware / injectionNettoyage + changement mots de passeMise à jour PS + audit modules Override défaillant`_PS_DISABLE_OVERRIDES_ = true`Réécrire l'override proprement Double inclusionAjouter `if (!defined('__PS_BASE_URI__'))`Refactoriser le script
#erreur PHP #sécurité #overrides #malware #config.inc.php #debug

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

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.