修复PHP在64位下序列化(serialize)的字符串在32位机器下反序列化(unserialize)出错的问题

时间:13-11-22 栏目:问题及解决 作者:admin 评论:0 点击: 7,357 次

32机器下PHP 整型数值的范围最大不超过2147483647,而有些超出范围的数值在64序列化好的数据标识为整型,在反序列时就可能会出错。
尝试使用以下的办法可以修复此问题:

<?php

function intvalS($s,$num) {
return 's:'.strlen($num).':"'. $num.'";';
}

//示例字符串(ShopEx4.85的规格参数) 13842408991超过2147483647范围

$specval = 'a:1:{i:6;a:3:{i:13842408991;a:5:{s:10:"spec_value";s:6:"黑色";s:9:"spec_type";s:4:"text";s:13:"spec_value_id";s:3:"237";s:10:"spec_image";s:0:"";s:17:"spec_goods_images";s:0:"";}i:13842409012;a:5:{s:10:"spec_value";s:6:"白色";s:9:"spec_type";s:4:"text";s:13:"spec_value_id";s:3:"238";s:10:"spec_image";s:0:"";s:17:"spec_goods_images";s:0:"";}i:13842409023;a:5:{s:10:"spec_value";s:6:"紫色";s:9:"spec_type";s:4:"text";s:13:"spec_value_id";s:2:"31";s:10:"spec_image";s:0:"";s:17:"spec_goods_images";s:0:"";}}}';
$specval = 'a:3:{s:4:"spec";a:1:{i:6;s:6:"紫色";}s:21:"spec_private_value_id";a:1:{i:6;s:11:"13842409023";}s:13:"spec_value_id";a:1:{i:6;s:2:"31";}}';

$v = preg_replace('@(i)\:(\d{8,12});@e',"intvalS('\\1',\\2)",$v);

echo '<pre>',print_r(unserialize($specval)),'</pre>';

?>

修复PHP在64位下序列化(serialize)的字符串在32位机器下反序列化(unserialize)出错的问题:等您坐沙发呢!

发表评论


------====== 本站公告 ======------
联系信息:
电话:19970108113(微信同号) QQ:3142401606
支付宝:https://me.alipay.com/lxq73061
相关插件程序等信息均会在站内发布,敬请关注。

读者排行