Ta boutique Prestashop plante ? Ah tu sais pas en fait…

Voilà un problème auquel je me suis heurté récemment avec un client… sa boutique Prestashop semblait bien fonctionner… pourtant on avait des cas assez étrange qui se produisaient… du coup j’ai poussé un peu l’analyse plus loin…


Des problèmes aléatoires
Typiquement dans le cas de ce client… on se trouvait avec des montant de frais de ports parfois faux… des commandes parfois vides (sans les produits). Bien sûr le problème se présentait aléatoirement… et on peut faire 10 fois la même manip… genre tout à coup le traitement varie et on se trouve avec le problème… impossible de le reproduire de manière régulière.

Et c’est là qu’intervient le debug SQL
En activant le debug SQL j’ai eu l’erreur SQL qui s’est affiché au bout de x tentatives… bien sûr initialement j’avais activé uniquement la gestion des erreurs, mais pas celles SQL (sur l’hébergement du client). Mais finalement… ça ne change pas la donne… car même en car d’erreur grave… je ne sais jamais ce qui s’est passé… ni quand…et si c’est vraiment grave ça serait bien que je sache ça de suite… non ? Oui, alors allons bricoler ensemble…

On est GO !
On va se faire un petit outil qui va nous aider à identifier rapidement si un problème survient sur la boutique…

Pour commencer il faut activer le _PS_MODE_DEV_ dans le fichier /config/defines.inc.php

Ensuite dans le fichier /classes/db/Db.php (pratiquez un override si vous le voulez) ajoutez après ces 2 lignes (vers ligne n° 615)…

else if (_PS_DEBUG_SQL_ && $errno && !defined('PS_INSTALLATION_IN_PROGRESS'))
		{

Ajoutez le code ci-dessous (modifiez l’email par votre adresse…)

// Webbax - 18.10.13 - log les erreurs SQL
$fp = fopen(dirname(__FILE__).'/../../log/errors_request.txt','a');
$header = "################ ERROR SQL : ".date('d-m-Y H:i:s')." ################ \r\n";
$footer = "\r\n -------------------------- \r\n";
$content = $header.$sql.$footer;
fwrite($fp,$content);
fclose($fp);
// alerte immédiate
mail('webbax@yopmail.com',$header,$content);
// ---

Ensuite, je vais volontairement faire planter la boutique… je vais modifier la requête de la fonction getProducts… dans le fichier /classes/Category.php (je nomme le champ avsailable_later au lieu de available_later).


Ensuite, je vais faire afficher les produits d’une catégorie…. ho ça plante… mince alors…


Mais ce qui est cool… c’est qu’à présent… sous /logs/errors_request.txt vous avez un fichier qui se génère avec l’erreur SQL… vous pouvez donc identifier le problème après coup.


Et la petite surprise… c’est que vous avez un mail qui est déclenché immédiatement… vous n’attendez pas une semaine avant de voir le problème.


Bilan
Le temps que j’ai perdu avec ça… fiou.. une bonne journée à chercher parce que je ne comprenais vraiment pas le problème… et pourtant il était bien là. Ce qui est fou c’est que Prestashop ne logue pas….. Ouarg… je me prends une claque dans la tête… je constate en écrivant ces lignes que Prestashop 1.5 logue les erreurs SQL… dans les fichiers « /log/xxx_exception.log » bon mon client était en 1.3 et là ça le faisait pas… (et je me souviens qu’il restait toujours vide ce répertoire).

Peut-être que ça servira quand même de référence pour d’autres qui voudraient faire ça pour une ancienne version… (ahaha… j’ai pas contrôlé ça sous la version 1.5 avant de rédiger le billet… honte à moi…). Si vous êtes donc sous Prestashop 1.5… vous avez tout ce qu’il faut à portée de main sous le répertoire « log » 😀 !

Notez mon billet, Google va adorer :
1 étoiles - J'aime pas !2 étoiles - Bof !3 étoiles - Bien !4 étoiles - Très bien !5 étoiles - Génial ! (Soyez le premier à noter ce billet)
Loading...

12 commentaires sur “Ta boutique Prestashop plante ? Ah tu sais pas en fait…”

  1. bonjour,

    Je suis en version 1.5 et voici le message d’erreur qu’en penses tu ?

    Lien vers la base de données ne peut être établie: SQLSTATE [42000] [1203] Utilisateur ougashoposc a déjà plus de connexions actives ‘max_user_connections’

    et plusieurs autres message SQL

    Merci d’avance

    1. Bonjour,

      Il semblerait que votre serveur soit déjà surchargé au niveau du trafic, si ce n’est pas le cas… il faudrait regarder du côté de l’hébergement, il devrait y avoir un problème.

      Si vous êtes en mutualisé, je pense qu’il faudrait faire un check en contactant votre hébergeur, pour savoir si les autres clients sur le serveur « saturent aussi »… ce qui peut parfois arriver si un des autre clients hébergé sature le serveur avec gros trafic.

      Merci pour votre visite !

  2. Merci pour votre réponse. Vous pensez que OVH (mon serveur) est saturé ? donc mon site est saturé aussi ? (groupe mutualisé)
    comment puis-je resoudre le probleme
    mes clients n’ont plus accès au site.

    à l’aide merci

    1. Bonjour,

      Difficile à dire comme cela, à voir aussi si vous n’avez pas installé un module qui tourne en boucle sur votre shop et qui provoquerait le blocage.

      Le plus simple dans un premier temps, serait d’avoir une confirmation de l’hébergeur, pour cela je vous invite à le contacter directement.

  3. Bonjour à tous

    j’ai un petit problème
    lors de la désinstallation de PAYPAL
    j’ai fait Supprimer à la place de désinstaller,
    Page blanche , message d’erreur:

    Parse error: syntax error, unexpected $end in /htdocs/prestashop/override/classes/order/Order.php on line 17

    Pouvez vous m’aider à résoudre ce problème
    Merci d’avance
    marco

    1. Bonjour,

      Le plus sage serait dans votre cas de restaurer le module supprimé… l’override en place a peut-être besoin du comportement de ces fichiers.

      Essayez de récupérer un backup uniquement de ce dossier (demandez à votre hébergeur pour le processus de récupération).

      Merci pour votre visite !

    1. Hello,

      Par défaut c’est à « false », il faut mettre ces deux valeurs à « true » pour voir tous les messages d’erreurs en cas de page blanche.

      Ne pas oublier de remettre à « false » en production, pour éviter des blocages ou des warning PHP pour l’internaute.

      A bientôt !

  4. Quand je clique sur Modules de mon back office le message suivant s’affiche et je n’arrive pas à accéder aux différents modules: [Prestashop] fatal error in module file:/var/www/modules/ebay/Upgrade-1.12.2.php: call to a member function deleteConfigurationByname() on a non-object.

    Merci pour votre aide

    1. Bonjour,

      Dans votre cas, je vous conseille de temporairement retirer le répertoire « ebay » du dossier « /modules » de votre boutique.

      A bientôt !

    1. Bonjour,

      Si vous n’avez pas accès à l’arborescence des dossiers, je vous invite à contacter votre hébergeur ou essayez de le faire depuis le gestionnaire de fichiers (normalement présent sur le panel de votre hébergement).

      Merci pour votre visite !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *