Magento et PHP 5.3

Votre site Magento est chez un hébergeur mutualisé, celui-ci est passé en PHP 5.3 sans crier gare, et plus rien ne fonctionne ?

Pas de panique. Sans aller jusqu'à dire que c'est normal, le problème est connu, et en cours de correction si ca n'est déjà fait. Ces erreurs viennent du fait que certains tronçons de Magento doivent avoir été produits il y'a un certain temps et font l'usage de fonctions PHP ou de syntaxes dépréciées.

Cela dit, si l'urgence se fait sentir, ou que vous ne pouvez vous permettre une montée de version, voilà comment résoudre le problème :

Dans "/lib/Varien/Object.php" à la ligne ~ 484, remplacer la déclaration de méthode suivante, dont la syntaxe n'est plus tolérée :

public function __toString(array $arrAttributes = array(), $valueSeparator=',')

Par :

public function __invoke(array $arrAttributes = array(), $valueSeparator=',')

Enfin, ajoutez la méthode suivantes juste après __invoke, afin de garantir un bon fonctionnement en cas d'appel direct à la méthode __toString :

function __toString() {
    return $this->__invoke( func_get_arg(0), func_get_arg(1) );
}

Ensuite, il faut partir à la chasse des appels à la fonction "split", qui est dorénavant interdite, pour les remplacer par la fonction "explode" qui fonctionne exactement de la même manière.

Exemple : dans "/app/code/core/Mage/Core/Controller/Request/Http.php" à la ligne 274

Remplacer :

$host = split(':', $_SERVER['HTTP_HOST']);

Par :

$host = explode(':', $_SERVER['HTTP_HOST']);

Il y'a plusieurs occurences de "split" à remplacer, mais attention, n'utilisez pas de remplacement massifs, vous risqueriez de remplacer aussi des occurences aux fonctions "preg_split" et "str_split" qui sont toutes deux utilisées dans le core de Magento et qui restent valides.

De plus, n'oubliez pas de vérifier aussi vos modules Magento locaux !

Une fois ces modifications effectuées, votre configuration Magento devrait être à nouveau fonctionnelle.

NOTE : Ces modifications altèrent le core de Magento (en particulier "/app/code/core" et "/lib"), il est donc fortement déconseillé d'opérer directement en production.

2 comments on "Magento et PHP 5.3"

Portrait de Laurent Clouet
Laurent Clouet - ven, 02/10/2009 - 10:52:

Bonne nouvelle, Yoav Kutner a annoncé sur son twitter que magento 1.4.0.0-alpha2 est compatible avec PHP 5.3. Il ne reste plus qu'à attendre à ce que cette version soit stable.

Portrait de Chat_botte
Chat_botte (visiteur) - dim, 18/10/2009 - 20:39:

J' ai suivi vos conseils, j' ai une erreur qui semble provenir de la modification du code et qui apparâit dans les sous-catégories du front-end:
Fatal error: func_get_arg(): Can't be used as a function parameter in C:\wamp\www\magento\lib\Varien\Object.php on line 491

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <p> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage