php crc32 作用,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
php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)相关推荐
- linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码: local Animal ={}functionAnimal:Eat( food )print("Anim ...
- 关于ADAMS中AZ函数使用时的一些心得
今天做仿真时,发现使用AZ函数时的一些注意事项: 一: 其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...
- memmove函数使用时注意的问题
首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...
- Matlab imshow(f,G)函数使用时出现错误
imshow(f,G)使用时出现错误 ① imshow(h,128) 错误使用 imshow>preParseInputs (line 467) IMSHOW 语法无效. 出错 imshow ( ...
- select函数使用时应注意的问题
问题一:fd_set和timeval的重置. select函数的使用一般分为以下几步 1.FD_ZERO(fd_set*); 2.FD_SET(int fd,fd_set*); 3.int selec ...
- 一个memset函数使用时的坑
平时使用memset函数都是用来初始化字符串,从来没有注意过它具体是怎么实现的,最近无意中发现原来这个函数里面还是有坑的. 我尝试用它来初始化整型数组 int array[10]; memset(ar ...
- GetMessage()函数使用时的注意
GetMessage()函数是一个很常见的函数,如果使用SDK写过Windows程序的话,那么就更不陌生,该函数的返回值值得注意的地方,因为最近在看Win32汇编的书,书中提到了这个函数.但是发现对于 ...
- strstr(str1,str2)函数使用时注意事项
可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...
- oracle的trim函数使用时不生效问题
数据库里的数据会有空格,用了trim函数,发现后边的空格并没有被去掉,还存在 用oracle的内置函数to_single_byte(...)来先将非法的空格进行转换成正常的可以trim的空格 ttri ...
最新文章
- RIP 数据包类型 路由中毒
- 亚马逊员工流动率150%,每8个月相当于“大换血”,网友:贝佐斯不知足
- Ruby/Rails 生态环境、社区、资料 Ecosystem
- PMCAFF招兵啦~只要最骚最浪的你~
- boost::dynamic_bitset模块boost::hash的测试程序
- python3 mysql同步_MySQL上云同步脚本-Python3
- 7、JPA-映射-双向一对多
- byte[]和InputStream的相互转换
- 2015手机病毒暴涨16倍 每天70万人次连接风险WiFi
- webpack打包优化_提速MAX 京东通天塔WEBPACK构建发布优化实践
- 计算机网络体系结构作业题整理-第一章答案
- vue学习笔记-10-常用特性之表单操作
- RESTLET开发实例
- 如何打开屏幕坏的手机_手机屏幕碎了怎么开usb?不通过屏幕打开usb调试方法
- c语言error lnk 2005,error LNK2005问题,小弟实在无能为力!!!
- C++ Reference: Standard C++ Library reference: C Library: cwctype: wint_t
- 干货 | 携程平台化常态化数据治理之路
- 以数据为中心的云计算——阿里云OS浅谈
- [RK3568 Android11] 开发之调试RK809 codec音频-MIC
- 基于R语言或Matlab直接读取压缩包中的数据