Я пытаюсь проверить целое число с помощью FILTER_VALIDATE_INT
, он работает нормально на сервере Ubuntu, но возвращает false в моей локальной системе win 10 xampp.
вот код
Случай 1:
$d = "sdaf";
var_dump(filter_var($d, FILTER_VALIDATE_INT));
OP: bool (false)
случай 2:
$d = "9876543210";
var_dump(filter_var($d, FILTER_VALIDATE_INT));
OP: bool (false)
случай 3:
var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));
OP: bool (false)
На сервере:
var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));
OP: int (9876543210)
Вы используете 32-битную Windows или 32-битный PHP на 64-битных окнах и 64-битный сервер?
Я думаю, что вы, вероятно, Если вы запустите это, вы получите правильные результаты. Ваши номера были больше, чем PHP_INT_MAX для 32-битной системы
echo PHP_INT_MAX;
$d = "sdaf";
var_dump(filter_var($d, FILTER_VALIDATE_INT));
$d = PHP_INT_MAX;
var_dump(filter_var($d, FILTER_VALIDATE_INT));
var_dump(filter_var(PHP_INT_MAX, FILTER_VALIDATE_INT));
РЕЗУЛЬТАТЫ:
2147483647
bool(false)
int(2147483647)
int(2147483647)
В PHP вы можете иметь 32-битные и 64-битные целые числа.
Максимальное 32-битное целое число, которое вы можете иметь, это 2147483647
меньше твоего 9876543210
,
Если у вас есть число, которое больше этого, оно преобразуется в число с плавающей точкой, поэтому проверка int завершается неудачно.
Если вы не хотите этого, вам нужна 64-битная версия PHP.
И если у вас есть окна, это должен быть PHP 7 или выше.
Зачем? 64-битные версии PHP 5. * имеют ошибку, что целые числа всегда 32-битные.
Больше информации: https://secure.php.net/manual/en/language.types.integer.php