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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
教你php如何实现验证码
Jan 20 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
Wordpress php 分页代码
2009/10/21 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
Python函数式编程指南(二):从函数开始
2015/06/24 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python中反射和描述器总结
2018/09/23 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
英国计算机商店:Technextday
2019/12/28 全球购物
港湾网络笔试题
2014/04/19 面试题
财务信息服务专业自荐书范文
2014/02/08 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
开门红主持词
2014/04/02 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
股份转让协议书
2014/04/12 职场文书
个人求职自荐信范文
2014/06/20 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js