2013-03-21 2 views
4

개발 서버가 32 비트이기 때문에 프로덕션 서버가 64 비트이기 때문에 프로덕션 서버를 옮길 때 문제가 발생합니다 (쿠분투 12.04 64 비트를 실행 중입니다). 내 질문은. PHP의 23 비트 버전을 설치하지 않고 int가 32 비트가되도록 강제 할 수 있습니까? 최대 정수 값을 선택할 수있는 라이브러리 또는 라이브러리64 비트 PHP 설치시 32 비트 정수를 사용하는 방법은 무엇입니까?

+0

아니요. PHP는 그런 식으로 변수를 제어하지 않습니다. var를 "short"또는 "int"또는 "unsigned"로 만들 수 없습니다. 정수, 문자열, 객체, 배열 만 있습니다. 32 비트 버전의 PHP를 설치할 이유가 없습니다. 여러 개의 독립적 인 PHP 설치가 가능합니다. –

+2

int가 32 비트 일 필요가있는 PHP 코드에서 어떤 종류의 작업을 수행합니까? –

+0

int (setter 함수 사용)가 32 비트 정수 수치 제한 (2,147,483,647)을 초과하지 않도록 제한 할 수 있습니다. 따라서 일반 정수를 그 이상으로 설정하면 예외를 throw 할 수 있습니다. 물론 이것은 절대 안전한 것은 아닙니다. 또한 PHP는 여전히 64 비트 정수를위한 모든 공간을 예약하기 때문에 아마도 메모리를 얻지 못할 것입니다. 마지막으로 할 수있는 일은 체인 된'char's가있는 32 비트 정수를 나타내는 클래스를 만드는 것입니다.하지만 이것은 64 비트 정수를 사용하는 것 이상의 이점을 얻지 못할 것입니다. –

답변

8

정수는 해당 플랫폼의 포인터 크기입니다. (32 비트 PHP -> 32 비트 정수, 64 비트 PHP -> 64 비트 정수).

정수 연산이 오버플로되면 변수가 부동 상태가됩니다. PHP documentation은이 모든 것을 잘 설명합니다.

정수에서 어떤 크기인지 신경 써야하는 코드에서 무엇을하는지 확신 할 수 없습니다. 그러나 32 비트의 값만 신경 쓰면 항상 낮은 32 비트를 마스크 할 수 있습니다.

+0

'$ val = $ something & 0xFFFFFFFF; '이 줄이 내 덕분에 나았어! – fnkbz

+3

하나의 경우는 CRC32에서 빌드를 사용하지 않고 CRC32를 계산하는 경우입니다. 예를 들어 제 경우와 같이 한 번에 1 바이트 씩 수행해야합니다. 여기에 꽤 큰 정수를 곱하면 64 비트 시스템에서도 부호가있는 32 비트 정수처럼 동작해야합니다. –

관련 문제