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.