• Développement
  • Magento

Magento < 1.9.2.0 : erreur 500 aléatoire (LIBXML et PHP-FPM)

anthony_360f3c3132
Anthony Grutter, Chief Technical Officer - Co-fondateur
Le 19 février 2016
random_error_500_magento_55c9a09e7a
  • ecommerce

Lecture :5 minutes

 

Si votre site Magento crashe de façon aléatoire en affichant un code d’erreur 500 et une note concernant la ligne 71 de Mage / Customer / Model / Session.php, cet article est fait pour vous.

En rafraîchissant n’importe quelle page de votre site, vous obtenez parfois votre contenu, ou parfois cette erreur. Plus le nombre de visiteurs est élevé sur votre site et plus cela se produit.

 

 

  

L’erreur :

Ce bug ne survient que sur les installations de Magento < 1.9.2.0 (même avec les patchs appliqués) et sur les serveurs utilisant PHP-FPM.
Dans votre fichier de log nginx (ou Apache), voici l’erreur générée :

[..] [error] 7648#0: *4507380 FastCGI sent in stderr: "PHP message: PHP Fatal error: Call to a member function getCode() on a non-object in [..]/app/code/core/Mage/Customer/Model/Session.php on line 71" while reading response header from upstream, client: 123.123.123.123, server: www.mon-site.com.fr, request: "GET [...]

En recherchant l’origine de cette erreur, nous remontons jusqu’à la méthode isInstalled() de Mage.php, où la ligne 767 :

$localConfig = simplexml_load_file($localConfigFile);

renvoie l’erreur :

Warning 1549: failed to load external entity "[...]app/etc/local.xml

Cette erreur peut en réalité apparaître sur n’importe quel chargement de fichier XML via la fonction simplexml_load_file() ; et peut même dans certains cas rediriger votre client sur le Wizard d’installation de Magento !


La résolution :

Ce problème est connu sur Magento ; une solution de contournement est en place depuis la version 1.9.2.0 et permet d'empêcher cette erreur de se produire.
Il s’agit du fichier app/bootstrap.php ; certains d’entre vous se sont sûrement déjà demandé à quoi servait ce fichier, en voilà la raison.

Voici le contenu de ce fichier :

if (function_exists('libxml_disable_entity_loader')) {
libxml_disable_entity_loader(false);
}

Il désactive une fonctionnalité de LIBXML. Ce fichier est inclus dans tous les scripts : index.php, get.php, cron.php, api.php.
On y retrouve aussi la référence vers deux rapports PHP :

/**
* Apply workaround for the libxml PHP bugs:
* @link https://bugs.php.net/bug.php?id=62577
* @link https://bugs.php.net/bug.php?id=64938
*/

Si vous souhaitez résoudre vos problèmes avec la LIBXML et PHP-FPM, vous pouvez au choix :

  • passer à Magento 1.9.2.0 ou ultérieur ; ajouter le fichier app/bootstrap.php et le “require” au début des fichiers index.php, get.php, cron.php et api.php.

Les Experts Magento de Blackbird peuvent également vous accompagner dans la résolution de vos problématiques et vous assister dans l'optimisation de votre site e-commerce Magento.

Nos articles

Découvrir aussi

  • Lors de nos développements en local, nous utilisons généralement PHPMyAdmin ou l’outil embarqué de PHPStorm, car ils sont simples d’utilisation, rapides et complets. Mais quand il s’agit de manipuler des bases de préproduction et production, c’est un peu plus délicat, car il n’est pas recommandé d’installer un PHPMyAdmin sur ces environnements pour une question de sécurité. Mais du coup comment faire ? Faire du SQL en CLI, connecté en SSH ? Non merci, pas très pratique.

  • La terminologie peut prêter à confusion : le passage vers Magento 2 se traduit plus par un changement de technologie qu’une migration vers une nouvelle version. Cette transition, devenue indispensable à l’heure où Adobe abandonne la maintenance sur M1, représente un réel défi technique et organisationnel pour les agences et e-commerçants qui veulent se mettre à jour. Petit tour d’horizon des principaux pièges à éviter.

  • <p>Magento, the open source ecommerce platform, is fast and stable in performance. However, each time a Magento page starts building and loading, in excess of a million instructions are being executed on the web server. This consumes an enormous amount of CPU and Memory resources. That is why, on a busy server, it can lead to the insufficient resources which cause slow page loads and lack of speed.</p>

Abonnez-vous au blog pour ne rien louper