Erreur 503 sur PrestaShop

Le guide complet pour les e-commerçants

Cache, modules, performances : protégez vos ventes et votre référencement.

L’enjeu pour un e-commerce

Sur un site vitrine, une erreur 503 est gênante. Sur une boutique PrestaShop, c’est une urgence commerciale :

  • Chaque minute d’indisponibilité = ventes perdues
  • Paniers abandonnés qui ne reviendront pas
  • Impact SEO sur vos fiches produits (longue traîne)
  • Confiance client dégradée

1€/min

Perte moyenne (CA 500k€)

68%

Des visiteurs ne reviennent pas après une erreur

4-6h

Seuil critique SEO pour e-commerce

Ce guide couvre les causes spécifiques à PrestaShop et leurs solutions.

Besoin d’une intervention immédiate ? IllicoPresta propose un support e-commerce spécialisé PrestaShop, disponible 7j/7.

Les 8 causes principales sur PrestaShop

Cache Smarty corrompu ou saturé

Fréquence : ⭐⭐⭐⭐⭐ (très fréquent)

Le moteur de template Smarty génère des fichiers cache qui peuvent se corrompre ou saturer le disque.

Symptômes :

  • 503 après une modification de thème
  • Erreurs Smarty dans les logs
  • Le back-office fonctionne mais pas le front

Solution détaillée

Module défaillant ou incompatible

Fréquence : ⭐⭐⭐⭐⭐ (très fréquent)

Un module mal codé, incompatible avec votre version de PrestaShop ou en conflit avec un autre module.

Symptômes :

  • 503 après installation/mise à jour d’un module
  • Erreur Class not found dans les logs
  • Problème sur une fonctionnalité spécifique (checkout, recherche)

Solution détaillée

Surcharge au checkout / panier

Fréquence : ⭐⭐⭐⭐ (fréquent)

Le tunnel de commande est la partie la plus sollicitée et la plus complexe. Pics de charge, calculs de frais de port, modules de paiement…

Symptômes :

  • 503 uniquement sur /commande ou /panier
  • Timeout lors du calcul des transporteurs
  • Erreurs liées aux modules de paiement

Solution détaillée

Crons et tâches planifiées bloquées

Fréquence : ⭐⭐⭐ (courant)

Les tâches automatiques de PrestaShop (import, export, indexation) peuvent s’accumuler et saturer le serveur.

Symptômes :

  • Lenteur progressive puis 503
  • Processus PHP qui tournent depuis des heures
  • Files d’attente qui grossissent

Solution détaillée

Overrides en conflit

Fréquence : ⭐⭐⭐ (courant)

Le système d’overrides de PrestaShop permet de modifier le core sans toucher aux fichiers source. Mais des overrides incompatibles peuvent tout casser.

Symptômes :

  • 503 après mise à jour PrestaShop
  • Erreurs Cannot redeclare class
  • Fonctionnalités qui ne marchent plus

Solution détaillée

Base de données saturée

Fréquence : ⭐⭐⭐ (courant)

Tables volumineuses (logs, stats, paniers abandonnés), requêtes lentes, index manquants.

Symptômes :

  • Lenteur généralisée puis timeout
  • Erreurs MySQL dans les logs
  • Le problème empire avec le temps

Solution détaillée

Limite mémoire PHP / Workers

Fréquence : ⭐⭐ (moins fréquent)

PrestaShop est gourmand en ressources. Catalogues volumineux, imports, génération de PDF…

Symptômes :

  • Allowed memory size exhausted
  • 503 sur les pages avec beaucoup de produits
  • Import/export qui échoue

Solution détaillée

Mode maintenance mal configuré

Fréquence : ⭐⭐ (moins fréquent)

Le mode maintenance natif de PrestaShop peut rester bloqué ou mal configuré, affichant une 503 sans le vouloir.

Symptômes :

  • 503 alors que vous pensiez avoir désactivé la maintenance
  • IP non reconnue dans la whitelist
  • Configuration incohérente en base

Solution détaillée

Problème 1 : Cache Smarty corrompu

Le cache Smarty est la cause n°1 des 503 sur PrestaShop. Un fichier corrompu et tout le front-end plante.

Diagnostic

# Erreurs Smarty dans les logs
$ grep -i "smarty" /var/log/php8.2-fpm.log | tail -20

# Exemples d'erreurs
Smarty error: unable to write to $compile_dir '/var/www/prestashop/var/cache/prod/smarty/compile'
Fatal error: Uncaught SmartyCompilerException: Syntax error in template

Solutions

Solution 1 : Vider le cache en ligne de commande (recommandé)

# PrestaShop 1.7+ / 8.x
$ cd /var/www/prestashop

# Vider tout le cache
$ rm -rf var/cache/prod/* var/cache/dev/*

# Régénérer
$ php bin/console cache:clear --env=prod
$ php bin/console cache:warmup --env=prod

Solution 2 : Vider uniquement Smarty

# Cache Smarty spécifiquement
$ rm -rf var/cache/prod/smarty/cache/*
$ rm -rf var/cache/prod/smarty/compile/*

Solution 3 : Via le back-office (si accessible)

Paramètres avancés > Performances > Vider le cache

Solution 4 : Script de nettoyage automatique

scripts/clear-cache.sh

#!/bin/bash
# Script de nettoyage cache PrestaShop

PRESTA_DIR="/var/www/prestashop"
cd $PRESTA_DIR

echo "🧹 Nettoyage du cache PrestaShop..."

# Supprimer les caches
rm -rf var/cache/prod/*
rm -rf var/cache/dev/*

# Régénérer (optionnel, se fait au premier accès)
# php bin/console cache:clear --env=prod --no-warmup

# Permissions
chown -R www-data:www-data var/cache/

echo "✅ Cache vidé !"

Configuration optimale du cache Smarty

Administration > Paramètres avancés > Performances

Cache de template : Oui (Recompiler si les fichiers ont été mis à jour)
Cache : Système de fichiers (ou Memcached/Redis si disponible)
Ne jamais recompiler les fichiers de template : NON en dev, OUI en prod stable

Ne jamais activer « Ne jamais recompiler » sur un site en développement ou en cours de modification. Vous ne verriez pas vos changements.

Problème 2 : Module défaillant

Diagnostic

Étape 1 : Identifier le module via les logs

$ grep -i "fatal\|error" /var/log/php8.2-fpm.log | grep -i "modules" | tail -20

# Exemple
PHP Fatal error: Class 'MyModule\Services\Calculator' not found in 
/var/www/prestashop/modules/mymodule/src/Calculator.php on line 45

Étape 2 : Voir les modules récemment modifiés

$ find /var/www/prestashop/modules -type f -mtime -1 -name "*.php" | head -20

Solutions

Solution 1 : Désactiver via base de données

$ mysql -u prestashop -p prestashop_db

# Voir les modules actifs
mysql> SELECT name, active FROM ps_module WHERE active = 1;

# Désactiver un module spécifique
mysql> UPDATE ps_module SET active = 0 WHERE name = 'monmodule';

# Supprimer les hooks du module (important !)
mysql> DELETE FROM ps_hook_module WHERE id_module = (
    SELECT id_module FROM ps_module WHERE name = 'monmodule'
);

# Vider le cache après
$ rm -rf var/cache/prod/*

Solution 2 : Désactiver via renommage du dossier

# Renommer le module (PrestaShop ne le trouvera plus)
$ mv modules/monmodule modules/monmodule_disabled

# Vider le cache
$ rm -rf var/cache/prod/*

Solution 3 : Désactiver tous les modules tiers

$ mysql -u prestashop -p prestashop_db

# Désactiver tous les modules non-natifs
mysql> UPDATE ps_module SET active = 0 
       WHERE name NOT IN (
           'ps_banner', 'ps_contactinfo', 'ps_emailsubscription',
           'ps_featuredproducts', 'ps_imageslider', 'ps_linklist',
           'ps_mainmenu', 'ps_searchbar', 'ps_socialfollow'
           -- Ajoutez les autres modules natifs
       );

# Vider le cache
$ rm -rf var/cache/prod/*

# Tester le site, puis réactiver un par un

Modules PrestaShop connus pour causer des problèmes

ModuleProblème fréquentSolution
Modules de paiementTimeout API, callback échouéVérifier credentials, augmenter timeout
Modules de transportCalcul lent, API transporteur downCache des tarifs, fallback
Modules SEORedirections en boucle, surchargeVérifier règles htaccess
Modules import/exportMemory exhausted, timeoutTraiter par lots, cron
Page buildersMémoire, cache incompatibleAugmenter limits, vider cache
Modules de cacheCache corrompu, conflitsDésactiver, vider, reconfigurer
Modules RGPDHooks partout, lenteurVérifier configuration, désactiver si test

Problème 3 : Surcharge au checkout

Le tunnel de commande est critique : c’est là que l’argent entre. C’est aussi la partie la plus complexe.

Diagnostic

# Requêtes vers le checkout dans les logs
$ grep -E "(cart|order|checkout)" /var/log/nginx/access.log | tail -50

# Temps de réponse des pages checkout
$ grep "POST /commande" /var/log/nginx/access.log | awk '{print $NF}' | sort -n | tail -20
# Le dernier champ est souvent le temps de réponse

# Erreurs spécifiques checkout
$ grep -i "carrier\|payment\|cart" /var/log/php8.2-fpm.log | tail -30

Causes et solutions

Cause 1 : Calcul des frais de port trop lent

Les modules de transporteurs font souvent des appels API en temps réel.

Solution : Mettre en cache les tarifs

<?php
// Dans un override ou module custom
// Cacher les tarifs transporteurs pendant 1h

class Carrier extends CarrierCore
{
    public static function getDeliveryPriceByWeight($id_carrier, $total_weight, $id_zone)
    {
        $cache_key = 'carrier_price_' . $id_carrier . '_' . $total_weight . '_' . $id_zone;
        
        if (Cache::isStored($cache_key)) {
            return Cache::retrieve($cache_key);
        }
        
        $price = parent::getDeliveryPriceByWeight($id_carrier, $total_weight, $id_zone);
        Cache::store($cache_key, $price);
        
        return $price;
    }
}

Cause 2 : Module de paiement qui timeout

# Vérifier les timeouts dans les logs
$ grep -i "timeout\|timed out" /var/log/php8.2-fpm.log | tail -20

Solution : Augmenter les timeouts pour les appels de paiement :

Configuration cURL dans le module

<?php
// Dans le module de paiement, augmenter le timeout
curl_setopt($ch, CURLOPT_TIMEOUT, 30);  // 30 secondes au lieu de 10
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

Cause 3 : Trop de hooks sur le checkout

$ mysql -u prestashop -p prestashop_db

# Voir les hooks les plus chargés
mysql> SELECT h.name, COUNT(hm.id_module) as nb_modules 
       FROM ps_hook h 
       JOIN ps_hook_module hm ON h.id_hook = hm.id_hook 
       GROUP BY h.id_hook 
       ORDER BY nb_modules DESC 
       LIMIT 20;

# Hooks critiques pour le checkout
# displayPayment, displayPaymentReturn, actionValidateOrder

Solution : Désactiver les modules non essentiels sur les hooks du checkout.

Cause 4 : Stock recalculé à chaque action

Sur les gros catalogues, le recalcul de stock peut être lourd.

Paramètres boutique > Produits > Stock

Permettre la commande de produits hors stock : Selon votre business
Activer la gestion des stocks : Oui
Nombre de jours pour considérer un produit "nouveau" : 20 (pas trop élevé)

Pour les pics de charge prévisibles (soldes, Black Friday) : mettez en cache le plus possible, désactivez les fonctionnalités non essentielles, et prévoyez un scaling serveur.

Problème 4 : Crons et tâches bloquées

Diagnostic

# Processus PHP qui tournent depuis longtemps
$ ps aux | grep php | awk '$10 > "00:30:00" {print}'

# Requêtes vers les crons
$ grep "cron" /var/log/nginx/access.log | tail -20

# Tâches en cours dans la base
$ mysql -u prestashop -p prestashop_db -e "
    SELECT * FROM ps_cronjobs WHERE active = 1;
"

Solutions

Solution 1 : Killer les processus bloqués

# Identifier
$ ps aux | grep php | grep -v grep

# Killer un processus spécifique
$ kill -9 <PID>

# Killer tous les processus cron PHP (attention !)
$ pkill -f "cron.php"

Solution 2 : Configuration cron système

# Désactiver le cron front-office (déclenché par les visites)
# Activer un vrai cron système

$ crontab -e

# Cron PrestaShop toutes les 15 minutes
*/15 * * * * /usr/bin/php /var/www/prestashop/bin/console prestashop:cron:run > /dev/null 2>&1

# Ou l'ancien système (PS 1.6 / début 1.7)
*/15 * * * * curl -s "https://monsite.com/modules/cronjobs/cron.php?token=VOTRE_TOKEN" > /dev/null 2>&1

Solution 3 : Nettoyer les tâches en attente

$ mysql -u prestashop -p prestashop_db

# Voir les jobs en attente
mysql> SELECT * FROM ps_cronjobs;

# Désactiver les jobs problématiques
mysql> UPDATE ps_cronjobs SET active = 0 WHERE id_cronjob = X;

# Vider la queue (selon votre configuration)
mysql> TRUNCATE TABLE ps_cron_task_log;

Import/Export qui bloque

Les imports de produits sont souvent responsables de blocages :

Solution : Import par lots

<?php
// Au lieu d'importer 10000 produits d'un coup
// Découper en lots de 100

// Dans votre script d'import
$batch_size = 100;
$offset = (int) $_GET['offset'] ?? 0;

$products = getProductsToImport($batch_size, $offset);

foreach ($products as $product) {
    importProduct($product);
}

// Relancer avec le prochain offset
if (count($products) == $batch_size) {
    header("Location: import.php?offset=" . ($offset + $batch_size));
    exit;
}

Problème 5 : Overrides en conflit

Le système d’overrides de PrestaShop est puissant mais dangereux : chaque module peut surcharger les classes core, créant des conflits.

Diagnostic

# Lister les overrides
$ ls -la /var/www/prestashop/override/classes/
$ ls -la /var/www/prestashop/override/controllers/

# Chercher les conflits dans les logs
$ grep -i "cannot redeclare\|already defined" /var/log/php8.2-fpm.log

# Voir quel module a installé quel override
$ grep -r "install.*override" /var/www/prestashop/modules/*/

Solutions

Solution 1 : Désactiver temporairement tous les overrides

# Renommer le dossier override
$ mv override override_backup

# Vider le cache
$ rm -rf var/cache/prod/*

# Régénérer le class index
$ php bin/console prestashop:cache:clear

Solution 2 : Identifier l’override problématique

# Comparer avec un PrestaShop propre
$ diff -r override/ /chemin/vers/prestashop-propre/override/

# Vérifier la date de modification des fichiers
$ ls -lat override/classes/*.php | head -10

Solution 3 : Régénérer le class index

# Supprimer le fichier d'index
$ rm var/cache/prod/class_index.php
$ rm var/cache/dev/class_index.php

# Il sera régénéré automatiquement

Solution 4 : Identifier les modules avec overrides

Script de détection

<?php
// Lister les modules qui utilisent des overrides
// Exécuter : php detect_overrides.php

$modules_dir = '/var/www/prestashop/modules/';

foreach (scandir($modules_dir) as $module) {
    if ($module == '.' || $module == '..') continue;
    
    $override_dir = $modules_dir . $module . '/override/';
    if (is_dir($override_dir)) {
        echo "Module: $module
";
        foreach (glob($override_dir . '*/*.php', GLOB_BRACE) as $file) {
            echo "  - " . str_replace($override_dir, '', $file) . "
";
        }
    }
}

Après une mise à jour PrestaShop majeure (1.7 → 8.x), tous les overrides doivent être vérifiés. Les signatures des méthodes peuvent avoir changé.

Problème 6 : Base de données saturée

PrestaShop génère beaucoup de données : logs, statistiques, paniers abandonnés, recherches…

Diagnostic

# Taille des tables
$ mysql -u prestashop -p prestashop_db -e "
    SELECT table_name, 
           ROUND(data_length/1024/1024, 2) as 'Data (MB)',
           ROUND(index_length/1024/1024, 2) as 'Index (MB)'
    FROM information_schema.tables 
    WHERE table_schema = 'prestashop_db'
    ORDER BY data_length DESC
    LIMIT 20;
"

# Tables à surveiller
+------------------------+-----------+-----------+
| table_name             | Data (MB) | Index (MB)|
+------------------------+-----------+-----------+
| ps_log                 | 450.00    | 120.00    | ← À nettoyer
| ps_connections         | 380.00    | 95.00     | ← À nettoyer
| ps_guest               | 250.00    | 60.00     | ← À nettoyer
| ps_statssearch         | 180.00    | 45.00     | ← À nettoyer
| ps_cart                | 150.00    | 40.00     | ← Paniers abandonnés
+------------------------+-----------+-----------+

Solutions

Solution 1 : Nettoyage des tables de logs

$ mysql -u prestashop -p prestashop_db

# Logs PrestaShop (garder 30 jours)
mysql> DELETE FROM ps_log WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);

# Statistiques de connexion (garder 90 jours)
mysql> DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);
mysql> DELETE FROM ps_connections_page WHERE time_start < DATE_SUB(NOW(), INTERVAL 90 DAY);
mysql> DELETE FROM ps_connections_source WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);

# Invités / guests (garder 30 jours)
mysql> DELETE FROM ps_guest WHERE id_guest NOT IN (
    SELECT id_guest FROM ps_connections WHERE date_add > DATE_SUB(NOW(), INTERVAL 30 DAY)
);

# Statistiques de recherche (garder 90 jours)
mysql> DELETE FROM ps_statssearch WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);

# Optimiser les tables après suppression
mysql> OPTIMIZE TABLE ps_log, ps_connections, ps_guest, ps_statssearch;

Solution 2 : Nettoyage des paniers abandonnés

$ mysql -u prestashop -p prestashop_db

# Paniers abandonnés de plus de 30 jours (sans commande associée)
mysql> DELETE FROM ps_cart 
       WHERE date_upd < DATE_SUB(NOW(), INTERVAL 30 DAY) 
       AND id_cart NOT IN (SELECT id_cart FROM ps_orders);

# Produits des paniers supprimés
mysql> DELETE FROM ps_cart_product 
       WHERE id_cart NOT IN (SELECT id_cart FROM ps_cart);

Solution 3 : Script de nettoyage automatique

scripts/clean-database.sh

#!/bin/bash
# Nettoyage automatique BDD PrestaShop
# À exécuter en cron hebdomadaire

DB_USER="prestashop"
DB_PASS="password"
DB_NAME="prestashop_db"

mysql -u $DB_USER -p$DB_PASS $DB_NAME << EOF

-- Logs (30 jours)
DELETE FROM ps_log WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Connexions (90 jours)
DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);

-- Paniers abandonnés (30 jours)
DELETE FROM ps_cart 
WHERE date_upd < DATE_SUB(NOW(), INTERVAL 30 DAY) 
AND id_cart NOT IN (SELECT id_cart FROM ps_orders);

-- Recherches (90 jours)
DELETE FROM ps_statssearch WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);

-- Optimisation
OPTIMIZE TABLE ps_log, ps_connections, ps_cart, ps_statssearch;

EOF

echo "✅ Nettoyage BDD terminé : $(date)"
# Cron hebdomadaire (dimanche 3h du matin)
$ crontab -e
0 3 * * 0 /var/www/prestashop/scripts/clean-database.sh >> /var/log/prestashop-cleanup.log

Solution 4 : Ajouter des index manquants

$ mysql -u prestashop -p prestashop_db

# Index fréquemment manquants
mysql> ALTER TABLE ps_cart ADD INDEX idx_date_upd (date_upd);
mysql> ALTER TABLE ps_log ADD INDEX idx_date_add (date_add);
mysql> ALTER TABLE ps_product ADD INDEX idx_active_visibility (active, visibility);

Problème 7 : Limite mémoire PHP

Diagnostic

# Limite actuelle
$ php -i | grep memory_limit

# Erreurs mémoire
$ grep -i "memory" /var/log/php8.2-fpm.log | tail -20
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

Solutions

Solution 1 : Augmenter dans php.ini

/etc/php/8.2/fpm/php.ini

; PrestaShop recommande 256M minimum, 512M pour gros catalogues
memory_limit = 512M
max_execution_time = 300
max_input_vars = 10000
post_max_size = 64M
upload_max_file_size = 64M

Solution 2 : Configuration dans PrestaShop

config/defines.inc.php

<?php
// Ajouter en haut du fichier
@ini_set('memory_limit', '512M');
@ini_set('max_execution_time', '300');

Solution 3 : Dans .htaccess (Apache)

.htaccess

# Après la section PrestaShop
php_value memory_limit 512M
php_value max_execution_time 300
php_value max_input_vars 10000

Optimiser la consommation mémoire

Paramètres avancés > Performances

Combiner, Compresser et mettre en Cache (CCC) : Activer
Smart cache for CSS : Oui
Smart cache for JavaScript : Oui
Optimisation Apache : Oui
# Limiter le nombre de produits en listing
# Administration > Paramètres boutique > Produits
# "Nombre de produits affichés par page" : 12-20 (pas 100)

Problème 8 : Mode maintenance bloqué

Diagnostic

$ mysql -u prestashop -p prestashop_db

# Vérifier l'état de la maintenance
mysql> SELECT name, value FROM ps_configuration 
       WHERE name IN ('PS_SHOP_ENABLE', 'PS_MAINTENANCE_IP');

+-------------------+------------------+
| name              | value            |
+-------------------+------------------+
| PS_SHOP_ENABLE    | 0                | ← 0 = maintenance active
| PS_MAINTENANCE_IP | 123.456.789.012  |
+-------------------+------------------+

Solutions

Solution 1 : Désactiver via base de données

$ mysql -u prestashop -p prestashop_db

# Réactiver la boutique
mysql> UPDATE ps_configuration SET value = '1' WHERE name = 'PS_SHOP_ENABLE';

# Ajouter votre IP à la whitelist (optionnel)
mysql> UPDATE ps_configuration SET value = 'VOTRE_IP' WHERE name = 'PS_MAINTENANCE_IP';

# Vider le cache
$ rm -rf var/cache/prod/*

Solution 2 : Script de désactivation d’urgence

scripts/disable-maintenance.php

<?php
/**
 * Script d'urgence pour désactiver le mode maintenance
 * Accéder via : https://monsite.com/scripts/disable-maintenance.php?token=SECRET
 */

// Sécurité : token unique
if ($_GET['token'] !== 'VOTRE_TOKEN_SECRET') {
    die('Accès refusé');
}

// Charger PrestaShop
require_once dirname(__FILE__) . '/../config/config.inc.php';

// Désactiver la maintenance
Configuration::updateValue('PS_SHOP_ENABLE', 1);

// Vider le cache
Tools::clearSmartyCache();
Tools::clearXMLCache();

echo "✅ Mode maintenance désactivé !";

Supprimez ce script après utilisation ou protégez-le avec un token très fort. Ne le laissez pas accessible publiquement.

Mode maintenance SEO-friendly

Le mode maintenance natif de PrestaShop ne gère pas le header Retry-After. Voici comment l’ajouter :

override/classes/controller/FrontController.php

<?php
class FrontController extends FrontControllerCore
{
    public function init()
    {
        parent::init();
        
        // Si maintenance active
        if (!(int) Configuration::get('PS_SHOP_ENABLE')) {
            // Vérifier si l'IP est autorisée
            $maintenance_ips = Configuration::get('PS_MAINTENANCE_IP');
            $allowed_ips = array_map('trim', explode(',', $maintenance_ips));
            
            if (!in_array(Tools::getRemoteAddr(), $allowed_ips)) {
                // Ajouter le header Retry-After (2 heures)
                header('HTTP/1.1 503 Service Unavailable');
                header('Retry-After: 7200');
                header('Cache-Control: no-store, no-cache, must-revalidate');
            }
        }
    }
}
# Après avoir créé l'override
$ rm -rf var/cache/prod/*

Commandes console PrestaShop essentielles

# === CACHE ===

# Vider tout le cache
$ php bin/console cache:clear --env=prod

# Préchauffer le cache
$ php bin/console cache:warmup --env=prod

# === DEBUG ===

# Activer le mode debug (temporairement)
$ php bin/console prestashop:debug:mode on

# Désactiver le mode debug
$ php bin/console prestashop:debug:mode off

# === BASE DE DONNÉES ===

# Vérifier l'intégrité
$ php bin/console prestashop:db:check

# Mettre à jour la base (après MAJ)
$ php bin/console prestashop:db:upgrade

# === MODULES ===

# Lister les modules
$ php bin/console prestashop:module:list

# Installer un module
$ php bin/console prestashop:module:install monmodule

# Désinstaller un module
$ php bin/console prestashop:module:uninstall monmodule

# === THÈME ===

# Réinitialiser le thème
$ php bin/console prestashop:theme:reset votre-theme

# === GÉNÉRATION ===

# Régénérer les miniatures
$ php bin/console prestashop:image:regenerate

# Réindexer les produits
$ php bin/console prestashop:index:all

# === MAINTENANCE ===

# Activer la maintenance
$ php bin/console prestashop:shop:maintain on

# Désactiver la maintenance
$ php bin/console prestashop:shop:maintain off

Checklist de diagnostic PrestaShop

Besoin d’un expert PrestaShop ?

Support e-commerce spécialisé, disponible 7j/7. Migrations, optimisations, urgences.

Questions fréquentes

Comment accéder au back-office si le front affiche une 503 ?

Souvent, le back-office reste accessible car il utilise un contrôleur différent. Essayez /admin-XXXX/ directement. Si ça ne marche pas : videz le cache via SSH (rm -rf var/cache/prod/*), ou désactivez les modules via base de données, ou renommez le dossier /override/.

PrestaShop 1.6 vs 1.7/8 : les causes sont-elles différentes ?

Les causes principales restent similaires (cache, modules, base de données). Mais PrestaShop 1.7+ utilise Symfony, donc les commandes console sont différentes. Le dossier cache est /var/cache/ au lieu de /cache/. Les overrides fonctionnent pareillement mais le class index a changé de format.

Après une mise à jour PrestaShop, j’ai une 503, que faire ?

1) Videz le cache (rm -rf var/cache/prod/*). 2) Vérifiez les overrides (compatibilité avec la nouvelle version). 3) Mettez à jour les modules tiers. 4) Si persistant, restaurez le backup et testez la mise à jour sur un staging d’abord.

Mon import de produits plante avec une 503, comment faire ?

Les imports massifs dépassent souvent les limites PHP. Solutions : augmentez memory_limit et max_execution_time, découpez l’import en lots (500 produits max), utilisez le cron pour les imports en arrière-plan, ou utilisez un outil d’import professionnel comme Store Commander.