0

我正在尝试通过使用来验证整数FILTER_VALIDATE_INT。它在 ubuntu 服务器上运行良好,但在我的本地 win 10 xampp 系统上返回 false。

这是代码

情况1:

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

操作:布尔(假)

案例2:

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

操作:布尔(假)

案例3:

var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));

操作:布尔(假)

在服务器上:

var_dump(filter_var(9876543210, FILTER_VALIDATE_INT));

操作:int(9876543210)

4

2 回答 2

1

在 PHP 中,您可以有 32 位和 64 位整数。
您可以拥有的最大 32 位整数 it2147483647小于 yours 9876543210

如果您有一个大于此的数字,它将转换为浮点数,因此 int 验证失败。

如果你不想要这个,你需要一个 64 位版本的 PHP。
如果你有 Windows,这需要 PHP 7 或更高版本。
为什么?PHP 5.* 的 64 位版本有一个错误,即整数始终为 32 位。

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

于 2017-01-19T10:49:33.813 回答
1

您是在运行 32 位 Windows,还是在 64 位 Windows 和 64 位服务器上运行 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)
于 2017-01-19T10:48:40.493 回答