Beim deserialsieren eines SimpleXml-Objekt mittels unserialize bekam ich zig PHP-Fehlermeldungen mit "Node no longer exists" angezeigt. Das Objekt wurde aber richtig serialisiert.
Warning: unserialize() [function.unserialize]: Node no longer exists
Das SimpleXML-Objekt wurde mit simplexml_load_file oder simplexml_load_string erzeugt und dann mit der PHP-Funktion serialize serialisiert. Wenn man sich ein das serialisierte Objekt anschaut, scheint alles in Ordnung zu sein. Alle Felder, bzw. Objekteigenschaften wurden korrekt abgelegt. Doch beim aufrufen der Funktion unserialize bekommt man eine solche Meldung präsentiert:
Warning: unserialize() [function.unserialize]: Node no longer exists in /var/www/somescript.php on line 42
Warum bekommt man dann Meldung mit "Node no longer exists"? Die Antwort liefert die PHP-Dokumentation:
Note: It is not possible to serialize PHP built-in objects
bzw.
Hinweis: Es ist nicht möglich, PHP-eigene Objekte zu serialisieren.
Lösung
Ich habe euch die Lösung zum Problem in zwei handliche Funktionen verpackt.
Download Code!
/**
* Serializes an SimpleXML object
*
* @author Mr. Foo
* @param SimpleXMLElement $xmlObj
* @return string
*/
function serializeSimpleXML(SimpleXMLElement $xmlObj) {
}
/**
* Deserializes an SimpleXML object
*
* @author Mr. Foo
* @param string $str
* @return SimpleXMLElement
*/
function unserializeSimpleXML($str) {
}