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
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
PHP的password_hash()使用实例
Mar 17 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
php实现的简单日志写入函数
Mar 31 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 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 send session cache limiter 的问题的方法
2007/04/27 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
Python实现全局变量的两个解决方法
2014/07/03 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
Python爬虫教程知识点总结
2020/10/19 Python
高中毕业生自我鉴定范文
2013/09/26 职场文书
党员干部承诺书范文
2014/03/25 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
正则表达式拆分url实例代码
2022/02/24 Java/Android