После обновления до PHP 5.5 мы получаем следующую ошибку при добавлении веб-сайта, магазина или магазина. Эта ошибка все еще присутствует в 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}
Это код, который выдает ошибку
Код можно найти в 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);
}
Это, на мой взгляд, самый простой патч для метода:
/**
* 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);
}
Метод используется только Mage_Adminhtml_System_StoreController::storeAction()
.
Есть три возможных места, чтобы исправить это:
- Mage_Core_Helper_Abstract => именно там находится метод, но он отстой, потому что касается основного файла.
- Перепишите Mage_Core_Helper_Abstract => это абстрактный класс, поэтому его нельзя перезаписывать.
- Перепишите Mage_Adminhtml_Helper_Data и добавьте туда метод. => Я думаю, что это путь.
Что, вы парни, думаете?
- Является ли вариант № 3 правильным способом решения проблемы?
- Код в моем патче правильный?
Ответы:
Да ты прав. Исправьте хелпер adminhtml. Это разница для исправления, которое я использую:
Это тест для подтверждения того же поведения, что и в php 5.4:
источник
Это теперь исправлено в Magento EE 1.14.1 и 1.9.1. Дополнительной несовместимостью являются изменения pack () / unpack (), которые влияют на Backup / Rollback и некоторые расширения во время установки - все, что касается файлов tar. Я предполагаю, что любой, кто запускает Magento в производство, не использует их.
источник
Краткий ответ: Magento не совместим с PHP 5.5, не обновляйте ваш веб-сервер до версии 5.5.
Более длинный ответ: я предполагаю, что Magento исправляет эту ошибку в следующей версии, так что я бы просто взломал ядро и надеялся на лучшее. Я не знаю, правильный ли код, извините.
источник