这是我的代码:
<?php
$id = $_GET["id"];
if (is_int($id) === FALSE) {
header('HTTP/1.1 404 Not Found');
exit('404, page not found');
}
?>
Run Code Online (Sandbox Code Playgroud)
它总是进入if.
Mat*_*hew 32
is_int检查该数据类型是一个整数,但在一切$_GET将是一个字符串.因此,它将永远回归false.
在紧要关头,您可以转换为整数,然后检查!= 0.
$id = isset($_GET['id']) ? (int) $_GET['id'] : null;
if (!$id) { // === 0 || === null
header('HTTP/1.1 404 Not Found');
exit('404, page not found');
}
Run Code Online (Sandbox Code Playgroud)
但是更强大的解决方案将涉及某种类型的输入字符串验证/过滤,如PHP的内置filter_input_array().
(10月13日编辑,因为它仍然收到了赞成票,而且措辞有些令人困惑.)
$ _GET数组中的用户输入(以及其他超级全局)都采用字符串的形式.
is_int检查值的类型(即string),而不是它是否包含类似整数的值.为了验证输入是一个整数字符串,我建议使用类似的东西ctype_digit或整数过滤器(FILTER_VALIDATE_INT这有利于实际将值更改为整数类型).当然你也可以用它进行类型转换(int).