Após a atualização para o PHP 5.5, obtemos o seguinte erro ao adicionar um site, loja ou exibição de loja. Este bug ainda está presente no 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 é o código que produz o erro
O código pode ser encontrado em 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 é, na minha opinião, o patch mais fácil para o 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);
}
O método é usado apenas pelo Mage_Adminhtml_System_StoreController::storeAction()
.
Existem três lugares possíveis para corrigi-lo:
- Mage_Core_Helper_Abstract => é onde o método está localizado, mas é péssimo porque toca em um arquivo principal.
- Reescreva Mage_Core_Helper_Abstract => é uma classe abstrata, portanto não deve / não deve ser reescrita.
- Reescreva Mage_Adminhtml_Helper_Data e adicione o método lá. => Eu acho que este é o caminho a percorrer.
O que é que vocês acham?
- A opção 3 é a maneira correta de corrigir o problema.
- O código do meu patch está correto?
Respostas:
Sim você está certo. Corrija o adminhtml helper. Este é o diff para a correção que eu uso:
Este é um teste para confirmar que o comportamento é o mesmo do php 5.4:
fonte
Agora isso foi corrigido no Magento EE 1.14.1 e 1.9.1. Incompatibilidade adicional são as alterações pack () / unpack () que afetam o Backup / Rollback e algumas extensões durante a instalação - qualquer coisa que toque em arquivos tar. Suponho que qualquer um que esteja executando o Magento em produção não esteja usando esses.
fonte
Resposta curta: Magento não é compatível com PHP 5.5, não atualize seu servidor da Web para 5.5.
Resposta mais longa: eu diria que o Magento corrige esse bug com a próxima versão, então eu faria um hack principal e esperaria o melhor. Não sei se o código está correto, desculpe.
fonte