Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich den PHP-Fehler „unserialize()': Falsche Byteanzahl in serialisierten Daten?
So reparieren Sie beschädigte serialisierte Daten aufgrund einer falschen Byte-Anzahllänge
Einführung
Wann Wenn Sie die Funktion unserialize() in PHP verwenden, kann der Fehler unserialize() auftreten. [function.unserialize]: Fehler am Offset. Dieser Fehler weist normalerweise darauf hin, dass die serialisierten Daten beschädigt sind oder eine falsche Byte-Anzahllänge aufweisen. Dieses Problem tritt auf, wenn die Länge der Elemente im serialisierten Array nicht korrekt berechnet wird.
Schnelllösung
Um dieses Problem zu beheben, berechnen Sie die Länge der Elemente im serialisiertes Array. Dies kann mithilfe regulärer Ausdrücke erfolgen. Zum Beispiel:
$data = 'a:10:{s:16:"submit_editorial";b:0;s:15:"submit_orig_url";s:13:"www.bbc.co.uk";s:12:"submit_title";s:14:"No title found";s:14:"submit_content";s:12:"dnfsdkfjdfdf";s:15:"submit_category";i:2;s:11:"submit_tags";s:3:"bbc";s:9:"submit_id";b:0;s:16:"submit_subscribe";i:0;s:15:"submit_comments";s:4:"open";s:5:"image";s:19:"C:fakepath100.jpg";}'; $data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Beispiel
Ohne Neuberechnung:
var_dump(unserialize($data));
Ausgabe:
Notice: unserialize() [function.unserialize]: Error at offset 337 of 338 bytes
Mit Neuberechnung:
var_dump(unserialize($data));
Ausgabe:
array 'submit_editorial' => boolean false 'submit_orig_url' => string 'www.bbc.co.uk' (length=13) 'submit_title' => string 'No title found' (length=14) 'submit_content' => string 'dnfsdkfjdfdf' (length=12) 'submit_category' => int 2 'submit_tags' => string 'bbc' (length=3) 'submit_id' => boolean false 'submit_subscribe' => int 0 'submit_comments' => string 'open' (length=4) 'image' => string 'C:fakepath100.jpg' (length=17)
Empfehlung
Anstatt temporäre Korrekturen zu verwenden, ist es sehr empfehlenswert Es wird empfohlen, die Grundursache der Korruption zu ermitteln. Dies kann eine Überprüfung der Serialisierung und Speicherung der Daten erfordern.
Zusätzliche Überlegungen
Das obige ist der detaillierte Inhalt vonWie behebe ich den PHP-Fehler „unserialize()': Falsche Byteanzahl in serialisierten Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!