FILTER_VALIDATE_INT return 始终为假

FILTER_VALIDATE_INT return false always

我正在尝试使用 FILTER_VALIDATE_INT 验证整数。它在 ubuntu 服务器上工作正常,但在我的本地 win 10 xampp 系统上 return 错误。

这是代码

案例 1:

$d = "sdaf";
var_dump(filter_var($d, FILTER_VALIDATE_INT));

OP:布尔值(假)

案例 2:

$d = "9876543210";
var_dump(filter_var($d, FILTER_VALIDATE_INT));

OP:布尔值(假)

案例 3:

var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));

OP:布尔值(假)

在服务器上:

var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));

OP:整数(9876543210)

您是运行在 64 位 windows 和 64 位服务器上运行安装 32 位 Windows 还是 32 位 PHP?

我想你可能是。如果你 运行 这个你会得到正确的结果。您的数字大于 32 位系统的 PHP_INT_MAX

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 验证失败。

如果您不想这样,您需要 PHP 的 64 位版本。
如果您有 windows,则需要 PHP 7 或更高。
为什么? PHP 5.* 的 64 位版本有一个错误,即整数总是 32 位。

更多信息:https://secure.php.net/manual/en/language.types.integer.php