Heim >Datenbank >MySQL-Tutorial >Wie behebt man „unserialize(): Fehler am Offset', der durch eine falsche Byte-Anzahllänge in serialisierten PHP-Strings verursacht wird?
So beheben Sie eine beschädigte serialisierte Zeichenfolge aufgrund einer falschen Byteanzahllänge
Der Fehler „unserialize() [function.unserialize ]: Fehler am Offset“ tritt häufig auf, wenn mit beschädigten serialisierten Zeichenfolgen gearbeitet wird. In diesem Fall ist das Problem auf eine falsche Länge der Byteanzahl zurückzuführen.
Verstehen des Problems
Wenn PHP Daten serialisiert, speichert es die Länge jedes serialisierten Elements als Präfix. Wenn diese Länge ungenau ist, kann PHP die Zeichenfolge nicht korrekt deserialisieren.
Schnelllösung
Um dieses Problem zu beheben, berechnen Sie die Länge jedes Elements im serialisierten Array mit neu die folgende Code:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
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:\fakepath0.jpg;"}'; var_dump(unserialize($data)); // Error var_dump(unserialize($recalculated_data)); // Correctly serialized
Empfehlungen:
Anstatt sich auf schnelle Lösungen zu verlassen, ist es so Es ist wichtig, Ihren Code auf Folgendes zu aktualisieren:
Validierung Funktion:
function findSerializeError($data1) { $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); $max = max(strlen($data1), strlen($data2)); for ($i = 0; $i < $max; $i++) { if (@$data1[$i] !== @$data2[$i]) { return "Error at offset $i"; } } return true; }
Das obige ist der detaillierte Inhalt vonWie behebt man „unserialize(): Fehler am Offset', der durch eine falsche Byte-Anzahllänge in serialisierten PHP-Strings verursacht wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!