Vom: 29.06.2015

Pimcore Updatefehler in simplexml_load_string() von 2.x auf 3.x

Die Pimcore-Versionen vor 2.x kommen ab und an nicht mit dem Update auf 3.x klar, da einer der anzuwendenden Update-Dateien ohne Anpassungen für simple_xml zu groß ist. Mit folgender Änderungen können diese Schwierigkeiten aus dem Weg geräumt werden.

Fehlerursache in Pimcore

Es kommt folgender Fehler:
simplexml_load_string()
Download fails, see debug.log for more details. Error-Message: Warning: simplexml_load_string(): Entity: line 2: parser error : internal error: Huge input lookup in ...

Die Ursache ist, dass eine vom Update heruntergeladene Datei zu groß für simplexml_load_string() ist. Ab Version 2.7 kann die libxml aber durch die Option LIBXML_PARSEHUGE mit großen Dateien umgehen:

Sets XML_PARSE_HUGE flag, which relaxes any hardcoded limit from the parser. This affects limits like maximum depth of a document or the entity recursion, as well as limits of the size of text nodes.

Diese Option kann in pimcore eingebaut werden.

Fehlerbehebung

Hierfür in Datei pimcore/lib/Pimcore/Update.php folgende Zeilen suchen:

        $xml = Pimcore_Tool::getHttpData($url);
        if($xml) {
            $updateFiles = simplexml_load_string($xml, null, LIBXML_NOCDATA);

und ändern in:

        $xml = Pimcore_Tool::getHttpData($url);
        if($xml) {
            $parserOptions = LIBXML_VERSION >= 20900 ? LIBXML_NOCDATA | LIBXML_PARSEHUGE : LIBXML_NOCDATA;
            $updateFiles = simplexml_load_string($xml, null, $parserOptions);