无法从文件中反序列化序列化的getimagesize数组

时间:2012-11-14 22:11:55

标签: php

我有一个文件“serialized.txt”,它包含一个序列化数组(通过执行serialize($ array)创建)。

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文档,如果出现问题,该函数应返回 false ;不是字符串的内容。

序列化数据来自getimagesize,我已经验证了如果我序列化另一个数组并将其放入文件中:

serialize(array("hi"));

我可以成功生成输出:

Array
(
    [0] => hi
)

有什么想法可能会发生这种情况吗?与getimagesize数组相关的序列化过程的错误,或者我的复制和粘贴删除的文件中可能是“隐藏”字符?我已经生成了数百万个这样的文件,因此我无法更改存储方法。我想解决方案可能只是编写自己的解析器来序列化数组?输入总是相同的格式,这是合理的,但我想知道这是一个错误或我的错误在某处。

1 个答案:

答案 0 :(得分:3)

据我所知,您的数据是双序列化的,因此以下代码应该打印您的数组:

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

虽然您应该考虑如何保存到文件。您可能想要删除一个序列化。

这能解决您的问题吗?