Maison >développement back-end >tutoriel php >Comment corriger l'erreur « unserialize() » de PHP : nombre d'octets incorrect dans les données sérialisées ?
Comment réparer des données sérialisées corrompues en raison d'une longueur incorrecte du nombre d'octets
Introduction
Quand en utilisant la fonction unserialize() en PHP, vous pourriez rencontrer l'erreur unserialize() [function.unserialize] : Erreur à offset. Cette erreur indique généralement que les données sérialisées sont corrompues ou ont une longueur de nombre d'octets incorrecte. Ce problème survient lorsque la longueur des éléments du tableau sérialisé n'est pas calculée correctement.
Correction rapide
Pour résoudre ce problème, recalculez la longueur des éléments dans le tableau sérialisé. Cela peut être fait à l'aide d'expressions régulières. Par exemple :
$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);
Exemple
Sans recalcul :
var_dump(unserialize($data));
Sortie :
Notice: unserialize() [function.unserialize]: Error at offset 337 of 338 bytes
Avec recalcul :
var_dump(unserialize($data));
Sortie :
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)
Recommandation
Au lieu d'utiliser des correctifs temporaires, il est fortement recommandé pour identifier la cause profonde de la corruption. Cela peut impliquer de revoir la façon dont les données sont sérialisées et stockées.
Considérations supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!