前几天写了一个分表程序,用的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 crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)相关推荐

  1. linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别

    Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码: local Animal ={}functionAnimal:Eat( food )print("Anim ...

  2. 关于ADAMS中AZ函数使用时的一些心得

    今天做仿真时,发现使用AZ函数时的一些注意事项: 一:          其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...

  3. memmove函数使用时注意的问题

    首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...

  4. Matlab imshow(f,G)函数使用时出现错误

    imshow(f,G)使用时出现错误 ① imshow(h,128) 错误使用 imshow>preParseInputs (line 467) IMSHOW 语法无效. 出错 imshow ( ...

  5. select函数使用时应注意的问题

    问题一:fd_set和timeval的重置. select函数的使用一般分为以下几步 1.FD_ZERO(fd_set*); 2.FD_SET(int fd,fd_set*); 3.int selec ...

  6. 一个memset函数使用时的坑

    平时使用memset函数都是用来初始化字符串,从来没有注意过它具体是怎么实现的,最近无意中发现原来这个函数里面还是有坑的. 我尝试用它来初始化整型数组 int array[10]; memset(ar ...

  7. GetMessage()函数使用时的注意

    GetMessage()函数是一个很常见的函数,如果使用SDK写过Windows程序的话,那么就更不陌生,该函数的返回值值得注意的地方,因为最近在看Win32汇编的书,书中提到了这个函数.但是发现对于 ...

  8. strstr(str1,str2)函数使用时注意事项

    可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...

  9. oracle的trim函数使用时不生效问题

    数据库里的数据会有空格,用了trim函数,发现后边的空格并没有被去掉,还存在 用oracle的内置函数to_single_byte(...)来先将非法的空格进行转换成正常的可以trim的空格 ttri ...

最新文章

  1. RIP 数据包类型 路由中毒
  2. 亚马逊员工流动率150%,每8个月相当于“大换血”,网友:贝佐斯不知足
  3. Ruby/Rails 生态环境、社区、资料 Ecosystem
  4. PMCAFF招兵啦~只要最骚最浪的你~
  5. boost::dynamic_bitset模块boost::hash的测试程序
  6. python3 mysql同步_MySQL上云同步脚本-Python3
  7. 7、JPA-映射-双向一对多
  8. byte[]和InputStream的相互转换
  9. 2015手机病毒暴涨16倍 每天70万人次连接风险WiFi
  10. webpack打包优化_提速MAX 京东通天塔WEBPACK构建发布优化实践
  11. 计算机网络体系结构作业题整理-第一章答案
  12. vue学习笔记-10-常用特性之表单操作
  13. RESTLET开发实例
  14. 如何打开屏幕坏的手机_手机屏幕碎了怎么开usb?不通过屏幕打开usb调试方法
  15. c语言error lnk 2005,error LNK2005问题,小弟实在无能为力!!!
  16. C++ Reference: Standard C++ Library reference: C Library: cwctype: wint_t
  17. 干货 | 携程平台化常态化数据治理之路
  18. 以数据为中心的云计算——阿里云OS浅谈
  19. [RK3568 Android11] 开发之调试RK809 codec音频-MIC
  20. 基于R语言或Matlab直接读取压缩包中的数据

热门文章

  1. vue 声明周期函数_Vue_生命周期函数
  2. 3.27模拟赛 sutoringu(后缀数组)
  3. 【UVA2230】过河
  4. 20172327 2017-2018-2 《程序设计与数据结构》第五周学习总结
  5. SQL中常用系统函数
  6. 不用asp.net MVC,用WebForm照样能够实现MVC
  7. 我来说说java的NIO
  8. linux下libpcap抓包分析
  9. 鲜为人知的软件项目管理原则(转)
  10. MFC-使用自定义控件的方法