내 웹 호스트는 PHP_INT_MAX가 2147483647 즉 32 비트 환경임을보고합니다. 64 비트 환경에서 현재 작동하는 몇 가지 수학 연산을 변환하려고하므로 32 비트 환경에서도 작동합니다.몇 가지 32 비트 연산을 PHP 32 비트 환경에서 작동하도록 변환
32 비트 환경에서$id = '76561197996545192';
$temp = '';
for ($i = 0; $i < 8; $i++)
{
$temp .= chr($id & 0xFF);
$id >>= 8;
}
$result= md5('BE' . $temp);
echo $result;
상기 수율 de46c6d30bfa6e097fca82f63c2f4f4c
하지만 (실제로는 현재 64 비트 환경에서 않음) cd97cc68c1038b485b081ba2aa3ea6fa
을 수득한다. 비트 시프트 연산자가 불일치를 일으키는 것 같지만 확실하지 않습니다 (저는 PHP 전문가 나 수학자가 아니며 원래 코드의 작성자가 아닙니다 :)
BCMath는 32 비트 환경에 설치되며 다른 프레임 워크가 설치되어있을 수도 있습니다 (필요한 경우 phpinfo를 확인할 수 있음).
어떻게 수정해야합니까? 가능한가?
// 리누스
편집 : 예, 코드가 이상하게 보이는 알고 있지만, 64 비트 환경에서 의도 한대로 정확히 노력하고 있습니다.
당신이 정확할 수도, 이것을 다시 확인해야합니다. 그러면 문제는 $ id를 실제로 "더 큰"int로 선언하는 것입니다. 실제로 이러한 데이터 유형을 사용할 수는 없습니다. 이를 위해 BCMath를 사용할 수 있습니까? –