我一直试图在 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 整数类型可以扩展到一些 double 类型或类似的东西。但是为什么它在反序列化时不这样做呢?
如何反序列化这些对象?如果我不能,有什么办法可以将它们转换成别的东西?最后,有没有人在 PHP 本身中编写了反序列化方法?或者有关于协议的详细信息?我可以使用它并为这些整数提供一个自定义案例。
谢谢。
注意:我无法访问原始数据,只能访问序列化结果。