2012-07-14 2 views
0

32 비트 PHP가있는 Windows 64 비트에서 작업하고있었습니다. base_convert 사용하기 CentOS 64 Bit로 이동 한 후 64 비트 PHP는 다른 결과를 반환합니다. 예 :Windows 32 비트에서 Linux 64 비트로 옮겼습니다. base_convert() 문제

<?php 
    $input = 'f00706ff'; 
    $result = (int)base_convert($input,16,10); 
    echo $result; 
?> 

Win64 PHP32 -> 2147483647;

CentOS64에서 PHP64 -> 4026992383;

어떤 도움이 필요합니까?

답변

0

해결책을 찾았습니다.

<?php 
    $input = 'f00706ff'; 
    $result = (int)base_convert($input,16,10); 
    if($result > 2147483647) $result = 2147483647; 
    echo $result; 
?> 

어디 2147483647 = PHP_INT_MAX

1

16 진수 값이 32 비트 정수 범위를 벗어 났으므로 (2147483647은 부호가있는 정수의 경우 10 진수의 최대 값이므로) PHP의 32 비트 버전을 실행 중이므로 Windows 값이 잘못되었습니다. 리눅스 결과가 맞습니다 :)

또한 Windows에서 제대로 작동하려면 GNU 다중 정밀도 라이브러리 (예 : $result = gmp_strval(gmp_init('f00706ff', 16), 10);)를 사용할 수 있습니다. PHP의 32 비트 플랫폼은 최소한의 말을하는 데는 단 정치가없는 것처럼 보입니다.

+0

내가 내 리눅스는 이제 창처럼 행동 할 수있는 방법이 있나요 BIT (32)에? – Sahil

+0

32 비트 버전의 PHP를 실행하는 이외의 작업은 없습니다. (어느 것이 잘 작동하지 않습니다.) – duskwuff

+0

내 솔루션을 확인하십시오. 그것은 작동합니다. :) – Sahil

관련 문제