亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復已被錯誤字節計數長度損壞的序列化字符串?

如何修復已被錯誤字節計數長度損壞的序列化字符串?

GCT1015 2019-07-06 15:43:27
如何修復已被錯誤字節計數長度損壞的序列化字符串?我使用的是Hotaru CMS和圖像上傳插件,如果我試圖將圖像附加到一個帖子中,我會得到這個錯誤,否則沒有錯誤:取消序列化()[功能.非序列化]:在偏移量處出錯違規代碼(錯誤點指向*):/**      * Retrieve submission step data      *      * @param $key - empty when setting      * @return bool      */     public function loadSubmitData($h, $key = '')     {         // delete everything in this table older than 30 minutes:         $this->deleteTempData($h->db);         if (!$key) { return false; }         $cleanKey = preg_replace('/[^a-z0-9]+/','',$key);         if (strcmp($key,$cleanKey) != 0) {             return false;         } else {             $sql = "SELECT tempdata_value FROM " . TABLE_TEMPDATA . " WHERE tempdata_key = %s ORDER BY tempdata_updatedts DESC LIMIT 1";             $submitted_data = $h->db->get_var($h->db->prepare($sql, $key));             **if ($submitted_data) { return unserialize($submitted_data); } else { return false; }**          }     }數據從表,注意結束位有圖像信息,我不是一個PHP專家,所以我想知道你們這些家伙/女孩可能會怎么想?temdata_value: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";}編輯:我想我找到了序列化的部分./**      * Save submission step data      *      * @return bool      */     public function saveSubmitData($h)     {         // delete everything in this table older than 30 minutes:         $this->deleteTempData($h->db);         $sid = preg_replace('/[^a-z0-9]+/i', '', session_id());         $key = md5(microtime() . $sid . rand());         $sql = "INSERT INTO " . TABLE_TEMPDATA . " (tempdata_key, tempdata_value, tempdata_updateby) VALUES (%s,%s, %d)";         $h->db->query($h->db->prepare($sql, $key, serialize($h->vars['submitted_data']), $h->currentUser->id));         return $key;     }
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

我沒有足夠的聲譽來發表評論,所以我希望使用上述“正確”答案的人能看到這一點:

由于php5.5,preg_reve()中的/e修飾符已被完全廢棄,上面的preg_Match將出錯。php文檔建議在其位置使用preg_match_callback。

請找到以下解決方案,作為上述建議的preg_match的替代方案。

$fixed_data = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {      
    return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';},$bad_data );


查看完整回答
反對 回復 2019-07-06
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

還有另一個原因unserialize()失敗,因為您不正確地將序列化的數據放入數據庫(請參閱官方解釋這里。自serialize()返回二進制數據和php變量不關心編碼方法,因此將其放入文本中,VARCHAR()將導致此錯誤。

解決方案:將序列化的數據存儲到表中的BLOB中。


查看完整回答
反對 回復 2019-07-06
  • 3 回答
  • 0 關注
  • 623 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號