我在我的應用程序這個功能:反序列化有時會返回錯誤
public function direct($theTree)
{
$aTreeRoot = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $theTree);
return unserialize($aTreeRoot);
}
絕不應該返回false,但在錯誤日誌中的錯誤不斷髮生的歷史它說,它返回false。
但是,我不能在我的應用程序中複製錯誤。我嘗試盡一切可能,但它始終有效。
功能有問題嗎?
$theTree
來自會議。
編輯:正則表達式是因爲:unserialize
- 在評論中搜索我的正則表達式。它應該解決一個問題。
這是preg_replacing真的有必要嗎?這個Igor字符給出的例子提示這個解決方法是一個完全無效的序列化字符串。我沒有意識到有必要這樣做的任何錯誤。如果你的字符串是用`serialize`序列化的並且沒有被修改,它應該``反序列化`就好了。你是否自己遇到過這個問題,或者你是否因爲「它應該解決一個問題」而放入它? – deceze 2010-11-24 07:38:28
@deceze:是的,沒有那個正則表達式,反序列化不起作用。我將一個複雜的對象放入序列化的會話中,如果沒有正則表達式,就會出現反序列化的問題。正則表達式解決了這個問題,但它似乎反序列化有時會返回錯誤。 – 2010-11-24 07:40:43
三重檢查你的序列化字符串不會在某處找到任何額外的字符,改變編碼等。你可以給出一個失敗的例子嗎? – deceze 2010-11-24 07:43:21