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程序员工具
May 26 PHP
10条PHP编程习惯助你找工作
Sep 29 PHP
php 使用array函数实现分页
Feb 13 PHP
深入浅出php socket编程
May 13 PHP
php基本函数汇总
Jul 09 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
Zend Studio使用技巧两则
Apr 01 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
PHP单元测试配置与使用方法详解
Dec 27 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中接口与抽象类的区别
2013/06/08 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
python 全文检索引擎详解
2017/04/25 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python hashlib加密实现代码
2019/10/17 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
实习生自荐信范文分享
2013/11/27 职场文书
企业文明单位申报材料
2014/05/16 职场文书
保护环境标语
2014/06/09 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
投诉书范文
2015/07/02 职场文书
2019思想汇报范文
2019/05/21 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python