PHP unserialize: Serialized String debugging

PHP unserialize: Serialized String debugging

Heute ein kurzer Beitrag zum Thema PHP serialize.

Heute hatte ich mit dem Problem zu kämpfen, ein beschädigtes, serialisiertes Array zu reparieren.

Das Array war zuvor per  serialize(); in einen serialisierten String umgewandelt worden. Ein Modul hatte dann leider die enthaltenen URLs geändert, sodass die Prüfsummen der enthaltenen Textlängen nicht mehr passten.

Damit sind die Tripel gemeint, in denen PHP die Werte ablegt:
s:8:"cell_0_1"

Der zweite Wert gibt die Länge des Strings (dritter Wert) an und muss diesem entsprechen, um gültig zu sein. Dies erlaubt beispielsweise auch, dass Anführungszeichen innerhalb des Wertes vorhanden sind und nicht maskiert werden müssen.

Um herauszufinden wo der Fehler liegt, müsst ihr einfach nur die Ausgabe der PHP "E_NOTICE"-Meldungen aktivieren.

Dies könnt ihr in eurem Testscript folgendermaßen umsetzen:

  1. ini_set('error_reporting', E_ALL);
  2. var_dump(unserialize('a:196:{ [....]

Der Parser gibt euch dann einen Tipp, an welcher Stelle (Offset) ihr das Problem findet.
"unserialize" liefert übrigens bei einem Fehler einfach "false" zurück!

Hinweis: Achtet zudem darauf, dass der "display_errors"-Wert passt Wink Sonst könnt ihr lange nach der Ausgabe suchen.
Alternativ könnt ihr auch das Logging von E_NOTICE-Meldungen verwenden, um keine Ausgabe in der Oberfläche zu erzeugen.

Viel Erfolg!

Einordnung:

Kommentare

Sehr praktisch ist übrigens

Sehr praktisch ist übrigens diese Funktion, wenn man nicht eingreifen will oder kann und die Integrität erhalten muss.

http://www.shauninman.com/archive/2008/01/08/recovering_truncated_php_se...

Hallo Oliver, cooler Tipp!

Hallo Oliver, cooler Tipp! Vielen Dank Smile

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.

Weitere Informationen über Formatierungsoptionen