Heim >Datenbank >MySQL-Tutorial >Wie kann ich „unserialize(): Error at offset'-Fehler in beschädigten serialisierten Zeichenfolgen beheben?
Problem:
Der Fehler „unserialize( ) [function.unserialize]: Fehler bei „Offset“ beim Versuch, eine beschädigte serialisierte Zeichenfolge zu deserialisieren. Dieser Fehler weist darauf hin, dass die Zeichenfolge ungültige Byte-Anzahllängen enthält, was zu einer Datenkürzung führt.
Ursache:
Ungültige Serialisierungsdaten aufgrund falscher Berechnung der Elementlängen.
Schnelllösung:
Element neu berechnen Längen: Berechnen Sie die tatsächliche Länge jedes serialisierten Elements und aktualisieren Sie die entsprechenden Byte-Anzahlwerte.
Betrachten Sie beispielsweise die folgende serialisierte Zeichenfolge:
$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";}';
Verwenden Sie den folgenden Code, um Berechnen Sie die Elementlängen neu und korrigieren Sie sie:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Stellen Sie sicher, dass die Längen korrekt sind Zitat:Verwenden Sie einfache Anführungszeichen (') anstelle von doppelten Anführungszeichen ("), wenn Sie serialisierten Elementen Werte zuweisen, da letztere zu unerwarteter Kürzung führen können.
Zusätzliche Vorsichtsmaßnahmen:
Erkennen Sie Serialisierungsfehler im Zukunft:
Die folgende Funktion kann verwendet werden, um Elementlängenunterschiede zu identifizieren und dabei zu helfen, die Quelle der Beschädigung zu lokalisieren:
function findSerializeError($data1) { // ... (code omitted for brevity) }
Mit dieser Funktion können Sie die beschädigten Daten analysieren , identifizieren Sie das problematische Element und korrigieren Sie es entsprechend.
Das obige ist der detaillierte Inhalt vonWie kann ich „unserialize(): Error at offset'-Fehler in beschädigten serialisierten Zeichenfolgen beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!