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也可以?成Shell Script
Oct 09 PHP
聊天室php&mysql(四)
Oct 09 PHP
paypal即时到账php实现代码
Nov 28 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
Php-Redis安装测试笔记
Mar 05 PHP
PHP数组相关函数汇总
Mar 24 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 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中的Cannot modify header information 问题
2013/08/12 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
php实现登陆模块功能示例
2016/10/20 PHP
Javascript中的数学函数
2007/04/04 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
跟老齐学Python之编写类之二方法
2014/10/11 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python学习小技巧总结
2018/06/10 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python爬虫 正则表达式解析
2019/09/28 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
python中的对数log函数表示及用法
2020/12/09 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
教师开学感言
2014/02/14 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
导游词之江西赣州
2019/10/15 职场文书