> 백엔드 개발 > PHP 튜토리얼 > PHP의 crc32 함수를 사용할 때 주의해야 할 문제(그렇지 않으면 함정이 됩니다)_php Tips

PHP의 crc32 함수를 사용할 때 주의해야 할 문제(그렇지 않으면 함정이 됩니다)_php Tips

WBOY
풀어 주다: 2016-05-16 20:16:46
원래의
1153명이 탐색했습니다.

며칠 전에 테이블 분할 프로그램을 작성했는데, 사용된 해시 알고리즘은 crc32입니다.

코드 복사 코드는 다음과 같습니다.

함수 _getHash($username)
{
          $hash = crc32($username) % 512;
         $hash 반환
}

함수 _getTable($username)
{
          $hash = self::_getHash($username);
          'user_'를 반환합니다.
}


먼저 로컬 32비트 윈도우 머신에서 데이터를 생성하고 해당 테이블에 삽입합니다. 그런데 프로그램과 데이터를 서버(64는 Linux)로 전송해 보았는데, 해당 데이터를 찾을 수 없는 것을 발견했습니다. 조사 결과 서버의 crc32 결과가 로컬 결과와 다른 것으로 나타났습니다. PHP 매뉴얼을 다시 확인한 결과, crc32 인터페이스가 해당 머신과 관련이 있다는 것을 알게 되었습니다.
PHP 매뉴얼 설명:
코드 복사 코드는 다음과 같습니다.

PHP의 정수 유형은 부호가 있기 때문에 많은 crc32 체크섬은 32비트 플랫폼에서 음의 정수를 반환합니다. 하지만 64비트 설치에서는 모든 crc32() 결과가 양의 정수가 됩니다.

crc32에서 반환된 결과는 32비트 시스템에서 오버플로되므로 결과가 음수일 수 있습니다. 64비트 시스템에서는 오버플로가 없으므로 항상 양수입니다.

CRC 알고리즘은 단어 길이의 비트 수를 기준으로 계산됩니다.

crc32 함수는 PHP의 두 상수 참조에 따라 PHP_INT_SIZE 및 PHP_INT_MAX를 계산합니다
이 두 상수의 정의:
정수의 워드 크기는 플랫폼에 따라 다르지만 일반적인 최대값은 약 20억(32비트 부호 있음)입니다. PHP는 부호 없는 정수를 지원하지 않습니다. 정수값의 단어 길이는 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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿