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无限级分类方法及代码
Jun 21 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
PHP 实现链式操作
Mar 09 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/05/15 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
基于node实现websocket协议
2016/04/25 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python实现录音小程序
2020/10/26 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
电子银行营销方案
2014/02/22 职场文书
2014年教研工作总结
2014/12/06 职场文书
学生保证书
2015/01/16 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
Python基础之进程详解
2021/05/21 Python