php的crc32函数使用时需要注意的问题(不然就是坑)

 更新时间:2015年04月21日 09:37:42   投稿:junjie  
这篇文章主要介绍了php的crc32函数使用时需要注意的问题(不然就是坑) ,需要的朋友可以参考下

前几天写了一个分表程序,用的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

相关文章

  • rephactor 优秀的PHP的重构工具

    rephactor 优秀的PHP的重构工具

    从PHP5开始,提供了强大的面向对象功能。使得PHP能够完全按设计模式编程。
    2011-06-06
  • zend framework多模块多布局配置

    zend framework多模块多布局配置

    zend framework对多模块的支持是很好的,但是可能是由于功能太过强大的缘故,部署起来并不是很容易。
    2011-02-02
  • php页面消耗内存过大的处理办法

    php页面消耗内存过大的处理办法

    是因为php页面消耗的最大内存默认是为 8M (在PHP的ini件里可以看到) ,如果文件太大 或图片太大 在读取的时候 会发生错误。
    2013-03-03
  • PHPLog php 程序调试追踪工具

    PHPLog php 程序调试追踪工具

    本文将为你介绍一个调试工具,它可以替代echo,print_r,var_dump等系统函数,还具有调用栈及参数追踪功能. 简言之,它是debug_backtrace的web版本.
    2009-09-09
  • PHP多文件上传类实例

    PHP多文件上传类实例

    这篇文章主要介绍了PHP多文件上传类,实例分析了php实现多文件上传的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Could not load type System.ServiceModel.Activation.HttpModule解决办法

    Could not load type System.ServiceModel.Activation.HttpModul

    本文章来详细介绍关于Could not load type System.ServiceModel.Activation.HttpModule from assembly System.ServiceModel解决办法,有需要的朋友可参考
    2012-12-12
  • 深入探讨"<br />"和 "\r\n" 两者有什么区别??

    深入探讨"<br />"和 "\r\n" 两者有什么

    本篇文章是对"<br />"和"\r\n"两者的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP读取Excel类文件

    PHP读取Excel类文件

    本篇文章主要介绍了PHP读取Excel类文件的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • 总结PHP删除字符串最后一个字符的三种方法

    总结PHP删除字符串最后一个字符的三种方法

    这篇文章为大家讲解的是php实现如何去掉字符串的最后一个字符的多种方法,感兴趣的同学参考下。下面来一起看看。
    2016-08-08
  • php之性能优化案例

    php之性能优化案例

    这篇文章主要介绍了php之性能优化案例,本文通过多个案例和多种场景下讲述了如何对php脚本进行性能上的优化,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论