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 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:
ini_set('error_reporting', E_ALL);
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 ;) 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!