Après avoir mis à niveau vers PHP 5.5, nous obtenons l'erreur suivante lors de l'ajout d'un site Web, d'un magasin ou d'une vue de magasin. Ce bug est toujours présent dans Magento 1.9.0.1
Exception message: Deprecated functionality: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in app/code/core/Mage/Core/Helper/Abstract.php on line 238
Trace: #0 [internal function]: mageCoreErrorHandler(8192, 'preg_replace():...', 'app...', 238, Array)
#1 app/code/core/Mage/Core/Helper/Abstract.php(238): preg_replace('# <(?![/a-z]) |...', 'htmlentities('$...', 'New Store Name')
#2 app/code/core/Mage/Adminhtml/controllers/System/StoreController.php(175): Mage_Core_Helper_Abstract->removeTags('New Store Name')
#3 app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_System_StoreController->saveAction()
#4 app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('save')
#5 app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#7 app/Mage.php(686): Mage_Core_Model_App->run(Array)
#8 index.php(87): Mage::run('', 'store')
#9 {main}
C'est le code qui produit l'erreur
Le code se trouve dans Mage_Core_Helper_Abstract
/**
* Remove html tags, but leave "<" and ">" signs
*
* @param string $html
* @return string
*/
public function removeTags($html)
{
$html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);
$html = strip_tags($html);
return htmlspecialchars_decode($html);
}
C'est, à mon avis, le patch le plus simple pour la méthode:
/**
* Remove html tags, but leave "<" and ">" signs
*
* @param string $html
* @return string
*/
public function removeTags($html)
{
$html = preg_replace_callback("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #xi",
create_function('$matches', 'return htmlentities($matches);'),
$html
);
$html = strip_tags($html);
return htmlspecialchars_decode($html);
}
La méthode n'est utilisée que par le Mage_Adminhtml_System_StoreController::storeAction()
.
Il y a trois endroits possibles pour le réparer:
- Mage_Core_Helper_Abstract => c'est là que se trouve la méthode, mais elle craint car elle touche un fichier core.
- Réécrire Mage_Core_Helper_Abstract => c'est une classe abstraite, donc elle ne doit pas / ne peut pas être réécrite.
- Réécrivez Mage_Adminhtml_Helper_Data et ajoutez-y la méthode. => Je pense que c'est la voie à suivre.
Qu'en pensez-vous?
- L'option # 3 est-elle la bonne façon de résoudre le problème.
- Le code de mon patch est-il correct?
Réponses:
Oui, tu as raison. Corrigez l'aide adminhtml. Voici la différence pour le correctif que j'utilise:
Ceci est un test pour confirmer que le comportement est le même qu'avec php 5.4:
la source
Ceci est maintenant corrigé dans Magento EE 1.14.1 et 1.9.1. Une incompatibilité supplémentaire est les changements pack () / unpack () qui affectent la sauvegarde / restauration et certaines extensions pendant l'installation - tout ce qui touche les fichiers tar. Je suppose que quiconque exécute Magento en production ne les utilise pas.
la source
Réponse courte: Magento n'est pas compatible PHP 5.5, ne mettez pas à jour votre serveur Web vers 5.5.
Réponse plus longue: je suppose que Magento corrige ce bogue avec la prochaine version, donc je ferais juste un hack de base et j'espère le meilleur. Je ne sais pas si le code est correct, désolé.
la source