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+DBM的同学录程序(1)
Oct 09 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php存储过程调用实例代码
Feb 03 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
因str_replace导致的注入问题总结
Aug 08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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实现获取FLV文件的时间
2015/02/10 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
jQuery:unbind方法的使用详解
2017/08/14 jQuery
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python中下划线的使用方法
2015/03/27 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
python实现两个文件夹的同步
2019/08/29 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
python 实现逻辑回归
2020/12/30 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
商务英语专业自荐信
2013/10/14 职场文书
连锁经营管理专业大学生求职信
2013/10/30 职场文书
感恩节活动方案
2014/01/27 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
白酒营销策划方案
2014/08/17 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS