我有一个文件“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
)
因此,从文件中提取时,问题似乎与序列化数组隔离。
根据反序列化文档,如果出现问题,该函数应该返回false ;不是字符串的内容。
序列化数据取自getimagesize,我已经验证如果我序列化另一个数组并将其放入文件中:
serialize(array("hi"));
我可以成功生成输出:
Array
(
[0] => hi
)
有什么想法为什么会发生这种情况?与 getimagesize 数组相关的序列化过程中的错误,或者可能是我的复制和粘贴删除的文件中的“隐藏”字符?我已经生成了数百万个这样的文件,因此我无法更改存储方法。我想解决方案可能只是编写我自己的解析器来序列化数组?输入总是相同的格式,所以这是合理的,但我想知道这是一个错误或我在某处的错误。