php的crc32函数使用时需要注意的问题(不然就是坑)


Posted in PHP onApril 21, 2015

前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下:

    function _getHash($username)

    {

        $hash = crc32($username) % 512;

        return $hash;

    }
    function _getTable($username)

    {

        $hash = self::_getHash($username);

        return 'user_' . $hash;

    }

 

首先在本地32位window机上生成好数据并插入对应的表中。但是再把程序和数据传到服务器上(64为linux),发现查不到数据。经过排查后发现,原来服务器上crc32的结果和本地不同。再查php手册才知,crc32的接口原来和机器有关。
php手册的描述:
Because PHP's integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all crc32() results will be positive integers though.

crc32返回的结果在32位机上会产生溢出,所以结果可能为负数。而在64位机上不会溢出,所以总是正值。

CRC算法是按字长位数bit进行计算的。

crc32函数会按照php中的两个常量参考计算 PHP_INT_SIZE,PHP_INT_MAX
这两个常量的定义:
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。PHP 不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示。
输出下32位中PHP_INT_SIZE:4,PHP_INT_MAX:2147483647
输出下64位中PHP_INT_SIZE:8,PHP_INT_MAX:9223372036854775807

PHP 相关文章推荐
十天学会php(1)
Oct 09 PHP
屏蔽浏览器缓存另类方法
Oct 09 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP中的session安全吗?
Jan 22 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 #PHP
PHP使用递归生成文章树
Apr 21 #PHP
php实现的美国50个州选择列表实例
Apr 20 #PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 #PHP
php中使用base HTTP验证的方法
Apr 20 #PHP
PHP加密解密类实例分析
Apr 20 #PHP
php通过分类列表产生分类树数组的方法
Apr 20 #PHP
You might like
php生成EXCEL的东东
2006/10/09 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
Python3处理HTTP请求的实例
2018/05/10 Python
详解python3中的真值测试
2018/08/13 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
工程总经理工作职责
2013/12/09 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
绿色城市实施方案
2014/03/19 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs