Freitag, 20. Juni 2008

PHP

Node no longer exists Fehler in PHP

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!

  1.  
  2. /**
  3.  * Serializes an SimpleXML object
  4.  *
  5.  * @author Mr. Foo
  6.  * @param SimpleXMLElement $xmlObj
  7.  * @return string
  8.  */
  9. function serializeSimpleXML(SimpleXMLElement $xmlObj) {
  10.         return serialize($xmlObj->asXML());
  11. }
  12.  
  13. /**
  14.  * Deserializes an SimpleXML object
  15.  *
  16.  * @author Mr. Foo
  17.  * @param string $str
  18.  * @return SimpleXMLElement
  19.  */
  20. function unserializeSimpleXML($str) {
  21.         return simplexml_load_string(unserialize($str));
  22. }
  23.  
Bewertung: 5 von 5, 1 Stimme(n) 2312 Klicks
PHP
Von Mr.Foo in PHP am 20.06.08@11:03 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

5 Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Christian Schenk - #1 - 19.02.2009 15:17 - (Antwort)

Vielen Dank für die Info! Genau diesen Workaround habe ich gebraucht - funktioniert perfekt.

Gabriel - #2 - 14.10.2009 00:03 - (Antwort)

Danke dafür, dass Du es ins Netz geschrieben hast. Hat mich vorher etwa eine Stunde ungläubiges Doku-Nachlesen und Rumprobieren gekostet. Dank Deines Beitrags aber auch nicht mehr als das. Thnx!

Jo - #3 - 31.08.2010 19:48 - (Antwort)

Falls beispielsweise eine große Datenmenge an serialisierten SimpleXMLElement Objekten vorliegt und ein erneutes laden und serialisieren via asXML() zu aufwendig ist, ist ein einfacher Weg die Daten wieder verwendbar zu machen:

[geshi lang=PHP]
unserialize(str_replace('O:16:"SimpleXMLElement"', 'O:8:"stdClass"', $serializedStr));
[/lang]

B - #4 - 09.02.2011 17:07 - (Antwort)

Danke für die Doku! Hat mir sehr geholfen!

Christian - #5 - 30.08.2011 12:42 - (Antwort)

Bei mir kommt der Fehler an einer anderen Stelle. Nämlich wenn ich einen Child-Node mit der unset() Methode entferne und danach den Knoten mit einer foreach Schleife durchlaufe. Habe leider noch keine Lösung dazu gefunden.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Node no longer exists Fehler in PHP

  • Homepage

Suche

Kategorien

  • C-Sharp (4)
  • Datenbank (28)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (15)
  • Internet (87)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (96)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (123)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (58)
  • Sonstiges (45)
  • Own Stuff (46)
  • Spass (45)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (16)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Februar 2012
  • Januar 2012
  • Dezember 2011
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (188)
  • Plugin-container.exe deaktivieren (101)
  • C compiler cannot create executables unter Debian (53)
  • BWin Betrug und Abzocke bei Minigames? (49)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (41)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (26)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (25)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

sandi zu Plugin-container.exe deaktivieren
Mo, 06.02.2012 11:10
Leider hat es nicht geklappt. Jetz [...]
Frank zu Magento ist scheisse
So, 05.02.2012 21:58
Seit etwa 6 Monaten bin ich auf de [...]
hansie zu Canon Blink Codes
Sa, 04.02.2012 19:49
Hallo, mein Canon Drucker MP 630 [...]
Bachsau zu Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert)
Mi, 01.02.2012 22:54
Bei Linux machen die Kernel-Entwic [...]
Mr. Foo zu Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert)
Mi, 01.02.2012 21:47
Also so kurz mal probiert hab ich [...]
 

Kontakt/Informationen