关于PHP的序列化(serialize)和反序列化(unserialize)在X86、X64系统中差异问题

问题背景@

近日在对ECStore进行系统集群部署的过程中,由于开发环境使用的是X64的CentOS系统,而在测试虚拟集群中使用X86的CentOS系统。部署后发现很多功能都存在问题,包括widget、商品附加属性等都无法正常显示,通过代码回溯发现,在数据库中存储的序列化数据在系统中进行反序列化会返回false。

问题解析@

在64位系统中

关于JSON_DECODE@

其实在将含有大整形数值的数组变为字符串的方法中基本都存在类似的问题,例如JSON_DECODE也会因为位元问题导致解码失败,这个问题估计要比序列化更为严重,因为目前流行的webservice中,尤其是RESTFUL所用到数据格式是JSON,如果在位元不同的混杂系统环境下,就可能会导致无法正确解析数据的问题。

在PHP 5.4+中,该问题得到了有效的解决。你可以使用json_decode的第四个参数来将大整数作为字符串进行解析。如下:

转载自:http://www.hiceon.com/topic/the-x86-and-x64-system-of-the-php-serialize-and-unserialize-discrepancies/

发表评论