我正在尝试修改此行。
最初,它是
$cmd = $_REQUEST["cmd"];
然后,我通过阅读Stackoverflow上的这篇文章a link来改变这一点。
$cmd = filter_input(INPUT_REQUEST, "cmd");
但是,我仍然得到最低限度的错误:
Warning: filter_input(): INPUT_REQUEST is not yet implemented
当我阅读其他文章a link时,它说“INPUT_REQUEST不是有效的类型。”
这里的解决方案是什么?
答案 0 :(得分:5)
根据文档(以及您的错误消息以及您引用的SitePoint Q& A的答案),它不是有效参数。 documentation says:
INPUT_GET
,INPUT_POST
,INPUT_COOKIE
,INPUT_SERVER
或INPUT_ENV
中的一个。
此功能没有INPUT_REQUEST
这样的东西。
这里的解决方案是什么?
使用其中一个实际存在的参数。
答案 1 :(得分:3)
<强> TL; DR 强>
如果您想使用filter_input()
过滤器选项,请选择POST
,GET
或COOKIE
作为您的请求类型。但这不是你唯一的选择。
注意: GET
通常用于发送检索数据请求的详细信息,而POST
用于提交要存储在服务器上的数据。
您有几个选择:
实际上,到目前为止(从PHP 7.2开始)只实现了INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV
。但你仍然可以得到它的行为。
自己实施INPUT_REQUEST:(我不建议这样做)您可以使用INPUT_GET
,INPUT_POST
和INPUT_COOKIE
来实现您的行为期望从当前不存在的INPUT_REQUEST
运行一个,如果没有运行下一个,依此类推,如下所示。
`$test_filter = filter_input(INPUT_COOKIE, 'test') ?? filter_input(INPUT_POST, 'test') ?? filter_input(INPUT_GET, 'test');`
使用INPUT_GET或INPUT_POST:如果您知道将使用哪个PUSH或GET发送请求,请使用相应的选项。例如,将使用INPUT_GET
检索在网址的查询字符串中发送的数据。
取消超级全球警告:您可以通过转到 Windows 选择netbeans向您显示的警告:Tools -> Options -> Editor -> Hints
Mac :{ {1}}并取消选择NetBeans -> Preferences -> Editor -> Hints
或您不想要的任何子集。
最后注意: Superglobals
有第三个参数是实际的过滤器部分;如果您仍然使用filter_input,那么您也可以实际使用过滤器。如果省略参数,那么:
如果省略,将使用FILTER_DEFAULT,这相当于FILTER_UNSAFE_RAW。这将导致默认情况下不进行过滤。
答案 2 :(得分:1)
如果仍然需要以类似方式访问$_REQUESTS
,则可以使用filter_var()。
您需要注意一些差异。
filter_var()
isset()
包装。filter_input()
$cmd = '';
if ( isset( $_REQUEST["cmd"] ) ) {
$cmd = filter_var( $_REQUEST["cmd"], FILTER_SANITIZE_STRING );
}
答案 3 :(得分:0)
请注意,根据此票证:https://bugs.php.net/bug.php?id=54672,INPUT_REQUEST
将永远不会实施。
INPUT_REQUEST
和 INPUT_SESSION
已在 PHP 8.0 中完全删除