Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membetulkan Ralat `unserialize()` PHP: Kiraan Byte Salah dalam Data Bersiri?
Cara Membaiki Data Bersiri Yang Rosak Akibat Panjang Kiraan Bait Yang Salah
Pengenalan
Bila menggunakan fungsi unserialize() dalam PHP, anda mungkin menghadapi ralat unserialize() [function.unserialize]: Ralat pada offset. Ralat ini biasanya menunjukkan bahawa data bersiri rosak atau mempunyai panjang kiraan bait yang salah. Isu ini timbul apabila panjang elemen dalam tatasusunan bersiri tidak dikira dengan betul.
Pembetulan Pantas
Untuk menyelesaikan isu ini, kira semula panjang elemen dalam tatasusunan bersiri. Ini boleh dilakukan menggunakan ungkapan biasa. Contohnya:
$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);
Contoh
Tanpa pengiraan semula:
var_dump(unserialize($data));
Output:
Notice: unserialize() [function.unserialize]: Error at offset 337 of 338 bytes
Dengan pengiraan semula:
var_dump(unserialize($data));
Output:
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)
Cadangan
Daripada menggunakan pembaikan sementara, ia sangat disyorkan untuk mengenal pasti punca rasuah. Ini mungkin melibatkan semakan cara data disiri dan disimpan.
Pertimbangan Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat `unserialize()` PHP: Kiraan Byte Salah dalam Data Bersiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!