Serialisieren von SimpleXMLElement Objekten

6. Mai 2010 Besucher gesamt: 756

Dieser Artikel widmet sich eher der Fehlermeldung „Warning: unserialize(): Node no longer exists in …“ in PHP. Das SimpleXML-Objekt wurde mit der Funktion simplexml_load_string() erzeugt und dann mit der Funktion serialize() serialisiert. Wenn man sich ein das serialisierte Objekt anschaut, scheint alles in Ordnung zu sein. Alle Felder, bzw. Objekteigenschaften wurden korrekt abgelegt. Was ist hier nun passiert?

In PHP ist es nicht möglich, PHP-eigene Objekte zu de-serialisieren. Das PHP SimpleXMLElement gehört zu den internen PHP-Library und kann nicht de-serialisiert werden. Die Funktion unserialize() kann zudem nur serialisiert Objekte verarbeiten die einen festen physischen Aufbau haben. d.h. Die Klasse für die Instanz muss physisch vorhanden sein, damit die Funktion unserialize() richtig de-serialisieren kann.

Als eine möglich Lösung, habe ich euch hier zwei Funktionen entworfen:

function MySerialize($toserialize)
{
    if($toserialize instanceof SimpleXMLElement)
    {
        $stdClass = new stdClass();
        $stdClass->type = get_class($toserialize);
        $stdClass->data = $toserialize->asXml();

        return serialize($stdClass);
    }

    return serialize($toserialize);
}

function MyUnserialize($tounserialize)
{
    $tounserialize = unserialize($tounserialize);

    if($tounserialize->type == 'SimpleXMLElement')
    {
        $tounserialize = simplexml_load_string($tounserialize->data);
    }

    return $tounserialize;
}

Wer aber ein Problem hat, sein Projekt komplett mit diese Funktionen zu ersetzen der kann auch dieses hot-hot-fix gerne verwenden.

$oUnserialized = unserialize(
                    str_replace(
                        array('O:16:"SimpleXMLElement":0:{}', 'O:16:"SimpleXMLElement":'),
                        array('s:0:"";', 'O:8:"stdClass":'),
                        $sYourSerializedObject
                    )
                 );

¬ geschrieben von gjerokrsteski in PHP Tricks und Tipps  ¬ Erzähl´s weiter Twitter  | Mr. Wong  | Delicious  | Del.icio.us  | Google  | Facebook

«

» 

Ein Kommentar zu 'Serialisieren von SimpleXMLElement Objekten'

  1. […] Dieser Eintrag wurde auf Twitter von Gjero Krsteski erwähnt. Gjero Krsteski sagte: Serialisieren von SimpleXMLElement Objekten http://krsteski.de/php-tricks-und-tipps/serialisieren-von-simplexmlelement-objekten.html […]

Hinterlasse einen Kommentar

*Codebeispiele können im CODE-Tag angegeben werden.

Powered by Wordpress • Abonniere den RSS Feed