ホームページ >データベース >mysql チュートリアル >破損したシリアル化された文字列の「unserialize(): Error at offset」エラーを修正するにはどうすればよいですか?
問題:
エラー「unserialize( ) [function.unserialize]: 試行時にオフセットでエラーが発生しました破損したシリアル化された文字列をシリアル化解除します。このエラーは、文字列に無効なバイト カウント長が含まれているため、データが切り捨てられていることを示します。
原因:
要素の長さの計算が正しくないため、シリアル化データが無効です。
クイック修正:
要素の長さの再計算: 各シリアル化された要素の実際の長さを計算し、対応するバイト カウント値を更新します。
たとえば、次のシリアル化された要素について考えてみましょう。 string:
$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";}';
次のコードを使用して要素を再計算して修正しますlength:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
適切な引用符を確保する: シリアル化された要素に値を割り当てるときは、二重引用符 (") ではなく一重引用符 (') を使用します。後者は予期しない切り捨てを引き起こす可能性があります。
追加注意事項:
今後のシリアル化エラーの検出:
次の関数を使用して、要素の長さの違いを識別し、ヘルプを得ることができます。破損の原因を特定します:
function findSerializeError($data1) { // ... (code omitted for brevity) }
この機能を使用すると、破損したデータを分析し、特定することができます。問題のある要素を見つけて、それに応じて修正してください。
以上が破損したシリアル化された文字列の「unserialize(): Error at offset」エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。