Henryk Plötz: kaputte Daten von serialize() - Wiederherstellung?

Beitrag lesen

Moin,

Ich versuche im Moment einen Parser zu schreiben der etwas fehlertoleranter ist als diese blöde unserialize()-Funktion. Mal sehen.

Viel Spaß dabei.
Habe ich auch schon versucht.
Serialize arbeitet mit einem sogenannten Domino-Format.
Wenn ein (entscheidenes) Zeichen fehlt, kommst Du total durcheinander.
Es ist aber in gewisser Weise Human Readable und positionsbeunden nach bestimmten Regeln.

Hmm? Also zumindest Syntaxfehler sollten sich recht gut automatisch lokalisieren lassen. Es ist zwar mehr-oder-weniger ein Tag-Length-Value-Format die wie du schriebst üblicherweise auf fehlende oder eingeschobene Bytes eher empfindlich reagieren, hat aber noch zusätzliche Redundanz drin, welche Plausibilitätsprüfungen erleichtert.

Wenn du etwas wie s3:"bla" hast, wo s:3:"bla" stehen müsste ist es leicht den Fehler zu finden. Ebenso kann man leicht einen Fehler bemerken wenn man s:4:"Teµst" einliest, oder a:2:{i:0;s:4:"Test";} etc. pp.

Die Fälle wo die angebene Länge von der tatsächlichen Länge soweit abweicht dass man rein zufällig wieder genau auf Metadaten landet und erst später mitkriegt, dass das keine echten Metadaten waren (sondern zum Beispiel Teile eines Postings über das serialize-Format ;-) oder man zu wenig (zu viel eher selten) Werte in einem Array hat sollten _sehr_ selten sein.

Dass man die meisten der Fehler nicht automatisch beheben kann, sondern sich ein Mensch das ansehen muß steht auf einem anderen Blatt. Aber darum geht es Julian wohl auch gar nicht soweit ich ihn verstanden habe.

--
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~