我一直在尝试在32位服务器上反序列化在64位服务器上序列化的对象。我已经将我的问题隔离为对象中的一个整数。这是这个问题的一个小复制品。
在64位计算机上:
$i = serialize('20110510134021'); //i:20110510134021;
在32位计算机上:
$i = unserialize('i:20110510134021;');
给出了错误
Notice: unserialize(): Error at offset 0 of 16 bytes
现在我明白了,这些序列化方法不应该用于跨系统数据传输。然而,我们只是尝试将数据迁移到另一个系统,而不是积极地将其用于传输。这是一次性的事情。
我认为这可能是由于整数溢出造成的,但即使在32位服务器上,我也可以这样做
$i = 20110510134021;
echo $i;
而且它会工作得很好。我猜PHP整数类型可以缩放为双精度类型或类似的类型。但是为什么它在非序列化时不这样做呢?
如何对这些对象进行反序列化?如果我不能,有没有办法把它们转换成其他的东西?最后,有没有人用PHP本身写了一个反序列化方法?或者有关于协议的详细信息?我可以使用它,并为这些整数自定义大小写。
谢谢。
注意:我不能访问原始数据,只能访问序列化后的结果。
https://stackoverflow.com/questions/7904355
复制相似问题