CleverCode에서는 최근 PHP 프로젝트 플라스틱 변환 문제가 발생했습니다. mysql id = 5147486396과 같이 bigint이고 긴 정수를 포함하는 필드 ID가 있습니다. 그러나 php 코드는 역사적인 이유로 여러 시스템에 배포되며, 그 중 시스템 A는 32비트 시스템이고 시스템 B는 64비트 시스템입니다. 이제 문제는 64비트 시스템에서 페이지 액세스가 정상이라는 것입니다. 32비트 시스템에서 액세스 오류가 발생했습니다. 그 이유는 PHP 형성 오버플로 때문입니다.
#getconf LONG_BIT
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>
(int)5147486396的结果是852519100,intval(5147486396)的结果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)结果是false。
#getconf LONG_BIT
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>
(int)5147486396的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。
단어 정수의 길이 플랫폼에 따라 다르지만 일반적으로 최대값은 약 20억(부호화된 32비트)입니다. 64비트 플랫폼의 최대값은 일반적으로 약 9E18입니다. PHP는 서명되지 않은 정수를 지원하지 않습니다. 정수 값의 단어 길이는 상수 PHP_INT_SIZE로 표현할 수 있습니다. PHP 4.4.0 및 PHP 5.0.5부터 최대값은 PHP_INT_MAX 상수
위 내용은 PHP 32비트 시스템의 긴 정수 강제 변환 오버플로에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!