Masalah:
Anda mengalami ralat "unserialize( ) [function.unserialize]: Ralat pada offset" semasa cuba nyahsiri rentetan bersiri yang rosak. Ralat ini menunjukkan bahawa rentetan mengandungi panjang kiraan bait yang tidak sah, mengakibatkan pemangkasan data.
Punca:
Data bersiri tidak sah disebabkan pengiraan panjang elemen yang salah.
Cepat Betulkan:
Kira Semula Panjang Elemen: Kira panjang sebenar setiap elemen bersiri dan kemas kini nilai kiraan bait yang sepadan.
Sebagai contoh, pertimbangkan bersiri berikut rentetan:
$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";}';
Gunakan kod berikut untuk mengira semula dan membetulkan elemen panjang:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Pastikan Petikan yang Betul: Gunakan petikan tunggal (') dan bukannya petikan berganda (") apabila memberikan nilai kepada elemen bersiri, kerana yang terakhir boleh menyebabkan pemangkasan yang tidak dijangka.
Tambahan Langkah berjaga-jaga:
Kesan Ralat Pensirian pada Masa Hadapan:
Fungsi berikut boleh digunakan untuk mengenal pasti elemen perbezaan panjang dan membantu mencari punca rasuah:
function findSerializeError($data1) { // ... (code omitted for brevity) }
Dengan menggunakan fungsi ini, anda boleh menganalisis data yang rosak, mengenal pasti elemen yang bermasalah dan membetulkannya dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membetulkan Ralat 'unserialize(): Error at offset' dalam Rentetan Bersiri yang rosak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!