Php 无法从文件中取消序列化序列化的getimagesize数组

Php 无法从文件中取消序列化序列化的getimagesize数组,php,Php,我有一个文件“serialized.txt”,其中包含一个序列化数组(通过serialize($array)创建) 要获取内容,我需要执行以下操作: $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

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

要获取内容,我需要执行以下操作:

$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;而不是字符串的内容

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

serialize(array("hi"));
我可以成功生成输出:

Array
(
    [0] => hi
)

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

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

$string = file_get_contents("serialized.txt");
print_r(unserialize(unserialize($string)));
尽管您应该考虑如何保存到文件。您可能需要删除一个序列化


这解决了您的问题吗?

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

$string = file_get_contents("serialized.txt");
print_r(unserialize(unserialize($string)));
尽管您应该考虑如何保存到文件。您可能需要删除一个序列化


这解决了您的问题吗?

很明显,您在最初保存到文件时序列化了两次。字符串序列化了两次……很明显,您在最初保存到文件时序列化了两次。字符串序列化了两次……哈!的确如此。我觉得有些东西看起来很奇怪,但我无法确定。一旦允许,我会将此标记为已接受。谢谢,哈!的确如此。我觉得有些东西看起来很奇怪,但我无法确定。一旦允许,我会将此标记为已接受。谢谢