Maison > développement back-end > tutoriel php > Comment réparer « unserialize() : erreur de décalage » provoquée par une longueur de nombre d'octets invalide dans les chaînes sérialisées ?

Comment réparer « unserialize() : erreur de décalage » provoquée par une longueur de nombre d'octets invalide dans les chaînes sérialisées ?

Mary-Kate Olsen
Libérer: 2024-12-16 11:53:15
original
836 Les gens l'ont consulté

How to Fix

Réparation d'une chaîne sérialisée avec une longueur de nombre d'octets invalide

Il est possible que l'erreur "unserialize() [function.unserialize] : erreur à l'offset" soit causée par chaîne sérialisée invalide en raison d'une longueur de nombre d'octets incorrecte.

Pour résoudre ce problème, nous devons recalculer la longueur des éléments dans le tableau sérialisé. Voici un exemple utilisant les données fournies :

$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);
Copier après la connexion

Après avoir recalculé les longueurs, nous pouvons maintenant désérialiser les données sans l'erreur :

var_dump(unserialize($data));
Copier après la connexion

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)
Copier après la connexion

Cependant, ce n'est qu'une solution rapide. Pour éviter de futurs problèmes de sérialisation, il est important de garantir que les données d'origine sont correctement sérialisées avec un nombre d'octets correct. Vous pouvez le faire en utilisant une méthode de sérialisation appropriée telle que :

$serializedData = serialize($data);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal