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实现框架(二)
Oct 09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
php 进度条实现代码
Mar 10 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php实现读取内存顺序号
Mar 29 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
javascript Excel操作知识点
2009/04/24 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
js中日期的加减法
2015/05/06 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
详解python中的异常和文件读写
2021/01/03 Python
linux面试题参考答案(7)
2012/10/29 面试题
董事长秘书岗位职责
2013/11/29 职场文书
男方父母证婚词
2014/01/12 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
技术员个人工作总结
2015/03/03 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android