Nach dem Upgrade auf PHP 5.5 wird beim Hinzufügen einer Website, eines Geschäfts oder einer Geschäftsansicht die folgende Fehlermeldung angezeigt. Dieser Fehler ist in Magento 1.9.0.1 immer noch vorhanden
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}
Dies ist der Code, der den Fehler erzeugt
Den Code finden Sie in 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);
}
Dies ist meiner Meinung nach der einfachste Patch für die Methode:
/**
* 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);
}
Die Methode wird nur von der Mage_Adminhtml_System_StoreController::storeAction()
.
Es gibt drei mögliche Stellen, um das Problem zu beheben:
- Mage_Core_Helper_Abstract => hier befindet sich die Methode, aber sie ist nicht gut, weil sie eine Kerndatei berührt.
- Schreibe Mage_Core_Helper_Abstract um => es ist eine abstrakte Klasse, daher sollte / kann sie nicht umgeschrieben werden.
- Schreiben Sie Mage_Adminhtml_Helper_Data neu und fügen Sie die Methode dort hinzu. => Ich denke, das ist der richtige Weg.
Was denkt ihr?
- Ist Option 3 der richtige Weg, um das Problem zu beheben.
- Ist der Code in meinem Patch korrekt?
Antworten:
Ja, du hast recht. Korrigieren Sie den adminhtml-Helfer. Dies ist der Unterschied für das Update, das ich verwende:
Dies ist ein Test, um zu bestätigen, dass das Verhalten mit PHP 5.4 identisch ist:
quelle
Dies ist jetzt in Magento EE 1.14.1 und 1.9.1 behoben. Eine weitere Inkompatibilität sind Änderungen an pack () / unpack (), die sich auf Backup / Rollback und einige Erweiterungen während der Installation auswirken - alles, was TAR-Dateien berührt. Ich gehe davon aus, dass jeder, der Magento in der Produktion ausführt, diese nicht verwendet.
quelle
Kurze Antwort: Magento ist nicht PHP 5.5 kompatibel, aktualisieren Sie Ihren Webserver nicht auf 5.5.
Längere Antwort: Ich gehe davon aus, dass Magento diesen Fehler mit der nächsten Version behebt, also würde ich einfach einen Core-Hack durchführen und das Beste hoffen. Ich weiß nicht, ob der Code korrekt ist, sorry.
quelle