2012-11-14 54 views
0

我有一個文件「serialized.txt」,它包含一個序列化數組(通過執行序列化($ array)創建)。不能從序列化的getimagesize數組文件中排序

s:133:"a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";}"; 

來獲取內容我做的:

$string = file_get_contents("serialized.txt"); 

然後我做的:

print_r(unserialize($string)); 

,我得到的輸出:

a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";} 

這是序列化版本當它應該是字符串(文件的內容)的時候打印未序列化的數組。如果我複製字符串並執行以下操作:

print_r(unserialize('a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";}')); 

我得到正確的輸出:

Array 
(
    [0] => 640 
    [1] => 480 
    [2] => 2 
    [3] => width="640" height="480" 
    [bits] => 8 
    [channels] => 3 
    [mime] => image/jpeg 
) 

所以,問題似乎從文件中提取時必須隔離,以序列化陣列。

根據unserialize文檔,函數應返回如果有問題;不是字符串的內容。

序列化的數據從getimagesize採取和我覈實,如果我序列另一個陣列,並將其放置到文件:

serialize(array("hi")); 

我可以成功地生成輸出:

Array 
(
    [0] => hi 
) 

是有什麼想法可能會發生這種情況?序列化過程與getimagesize數組相關的錯誤,或者是我的副本和粘貼刪除的文件中可能存在的「隱藏」字符?我已經生成了數百萬個這樣的文件,因此我無法更改存儲方法。我想解決方案可能只是編寫我自己的解析器來序列化數組?輸入總是相同的格式,所以這是合理的,但我想知道這是一個錯誤還是我在某處某處發生的錯誤。

+0

很明顯,當您最初保存到文件時,您將其序列化了兩次。 – mario

+0

你已經連載了兩次字符串.... – Baba

回答

3

至於我可以看到你的數據是雙串行所以下面的代碼應打印您陣列:

$string = file_get_contents("serialized.txt"); 
print_r(unserialize(unserialize($string))); 

雖然你應該想想你如何保存到文件。你可能想刪除一個序列化。

這是否解決您的問題?

+0

ha!所以它確實如此。我覺得有些奇怪,但我不能把它放在手指上。一旦它允許我將它標記爲已接受。謝謝。 – sam