Problème :
Vous rencontrez l'erreur "unserialize( ) [function.unserialize] : Erreur à l'offset" lors de la tentative de désérialisation d'un fichier sérialisé corrompu chaîne. Cette erreur indique que la chaîne contient des longueurs de nombre d'octets non valides, ce qui entraîne une troncature des données.
Cause :
Données de sérialisation non valides en raison d'un calcul incorrect des longueurs d'éléments.
Correction rapide :
Recalculer l'élément Longueurs : Calculez la longueur réelle de chaque élément sérialisé et mettez à jour les valeurs de nombre d'octets correspondantes.
Par exemple, considérons la chaîne sérialisée suivante :
$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";}';
Utilisez le code suivant pour recalculer et corriger les longueurs des éléments :
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Assurer une citation appropriée :Utiliser un seul guillemets (') au lieu de guillemets doubles (") lors de l'attribution de valeurs aux éléments sérialisés, car ces derniers peuvent provoquer une troncature inattendue.
Précautions supplémentaires :
Détecter les erreurs de sérialisation dans l'avenir :
La fonction suivante peut être utilisée pour identifier les différences de longueur des éléments et aider à localiser la source de la corruption :
function findSerializeError($data1) { // ... (code omitted for brevity) }
En utilisant cette fonction, vous pouvez analyser les données corrompues, identifier l'élément problématique et le corriger en conséquence.
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!