Después de actualizar a PHP 5.5, obtenemos el siguiente error al agregar un sitio web, tienda o vista de tienda. Este error todavía está presente en 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}
Este es el código que produce el error.
El código se puede encontrar en 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);
}
Este es, en mi opinión, el parche más fácil para el método:
/**
* 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);
}
El método solo lo utiliza el Mage_Adminhtml_System_StoreController::storeAction()
.
Hay tres lugares posibles para solucionarlo:
- Mage_Core_Helper_Abstract => es donde se encuentra el método, pero apesta porque toca un archivo central.
- Reescribir Mage_Core_Helper_Abstract => es una clase abstracta, por lo que no debe / no puede reescribirse.
- Reescribe Mage_Adminhtml_Helper_Data y agrega el método allí. => Creo que este es el camino a seguir.
¿Qué piensan ustedes?
- ¿Es la opción 3 la forma correcta de solucionar el problema?
- ¿Es correcto el código en mi parche?
Respuestas:
Sí, tiene usted razón. Repara el ayudante adminhtml. Esta es la diferencia para la solución que uso:
Esta es una prueba para confirmar que el comportamiento es el mismo que con php 5.4:
fuente
Esto ahora está arreglado en Magento EE 1.14.1 y 1.9.1. Una incompatibilidad adicional son los cambios de paquete () / desempaquetado () que afectan a la Copia de seguridad / Reversión y algunas extensiones durante la instalación, cualquier cosa que toque archivos tar. Supongo que cualquiera que esté ejecutando Magento en producción no los está usando.
fuente
Respuesta corta: Magento no es compatible con PHP 5.5, no actualice su servidor web a 5.5.
Respuesta más larga: supongo que Magento corrige este error con la próxima versión, por lo que simplemente haría un truco central y esperaría lo mejor. No sé si el código es correcto, lo siento.
fuente