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水印
Mar 16 PHP
PHP 身份验证方面的函数
Oct 11 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
php跨域cookie共享使用方法
Feb 20 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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 函数中使用static的说明
2012/06/01 PHP
jquery提示 "object expected"的解决方法
2009/12/13 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python中的函数用法入门教程
2014/09/02 Python
python中map()与zip()操作方法
2016/02/27 Python
Python正则简单实例分析
2017/03/21 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
优秀团干部个人事迹
2014/05/29 职场文书
员工离职感谢信
2015/01/22 职场文书
手机销售员岗位职责
2015/04/11 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
jquery插件实现搜索历史
2021/04/24 jQuery
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
css弧边选项卡的项目实践
2023/05/07 HTML / CSS