我有一个已经被php序列化的数组,结果是:
unserialize('a:2:{s:13:"custom_basket";a:1:{i:280583837398;a:4:{s:12:"product_name";s:0:"";s:8:"quantity";s:1:"1";s:5:"price";d:38.649999999999999;s:11:"description";a:7:{s:2:"id";s:12:"280583837398";s:3:"sku";s:0:"";s:4:"site";s:2:"UK";s:12:"condition_id";s:4:"1000";s:14:"transaction_id";s:12:"773563256018";s:8:"platform";s:4:"eBay";s:18:"order_line_item_id";s:25:"280583837398-773563256018";}}}s:6:"basket";a:0:{}}')
当我使用运行php 5.3.5的机器时,我得到:
注意:unserialize()[function.unserialize]:405字节的偏移46处的错误
当我旁边的家伙在运行5.3.6的机器上运行时,他将阵列退出。我们运行php 5.3.4的服务器也成功地反序列化了数组。
我得到的错误指向第二个数组i:280583837398
中的第一个键,如果我也改变它s:12:"280583837398"
我的机器现在可以成功地反序列化数组。
有没有人知道为什么会这样。我不知道它是不是php版本,我只是注意到我对两台成功的机器有不同的版本所以认为值得一提。
如果有帮助的话,我在Snow Leopard上运行MAMP PRO。
答案 0 :(得分:1)
不确定是否是版本,但也许不同版本的处理方式不同。看起来你理解s意味着一个x长度的字符串,因此s:12是一个长度为12的字符串。但是如果php试图将其解析为32位int,那么它可能会失败。
答案 1 :(得分:0)
280583837398是一个非常大的数字,也许你的机器试图将它装在integer
中,它支持最多32位的数字。
您可能需要long
才能存储此内容。
这就是我现在可以告诉你的一切。