Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich den PHP-Fehler „unserialize()': Falsche Byteanzahl in serialisierten Daten?

Wie behebe ich den PHP-Fehler „unserialize()': Falsche Byteanzahl in serialisierten Daten?

Susan Sarandon
Susan SarandonOriginal
2024-12-27 19:51:12407Durchsuche

How to Fix PHP's `unserialize()` Error: Incorrect Byte Count in Serialized Data?

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

  • Verwenden Sie beim Serialisieren einfache Anführungszeichen (') anstelle von doppelten Anführungszeichen (") Daten, um Probleme mit maskierten Zeichen zu vermeiden.
  • Verwenden Sie eine Bereinigungsfunktion (z. B. addslashes()), um zu maskieren Sonderzeichen.
  • Erwägen Sie die Verwendung eines alternativen Datenserialisierungsmechanismus wie JSON, der weniger anfällig für diese Art von Beschädigung ist.
  • Implementieren Sie einen Mechanismus zur Erkennung von Serialisierungsfehlern durch Vergleich der ursprünglichen und neu berechneten Daten Längen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn