警告:filter_input():尚未实现INPUT_REQUEST

时间:2017-09-22 17:47:02

标签: php netbeans-8

我正在尝试修改此行。

最初,它是

$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不是有效的类型。”

这里的解决方案是什么?

4 个答案:

答案 0 :(得分:5)

根据文档(以及您的错误消息以及您引用的SitePoint Q& A的答案),它不是有效参数。 documentation says

  

INPUT_GETINPUT_POSTINPUT_COOKIEINPUT_SERVERINPUT_ENV中的一个。

此功能没有INPUT_REQUEST这样的东西。

  

这里的解决方案是什么?

使用其中一个实际存在的参数

答案 1 :(得分:3)

<强> TL; DR 如果您想使用filter_input()过滤器选项,请选择POSTGETCOOKIE作为您的请求类型。但这不是你唯一的选择。

注意: GET通常用于发送检索数据请求的详细信息,而POST用于提交要存储在服务器上的数据。

您有几个选择:

实际上,到目前为止(从PHP 7.2开始)只实现了INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV。但你仍然可以得到它的行为。

自己实施INPUT_REQUEST:(我不建议这样做)您可以使用INPUT_GETINPUT_POSTINPUT_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()

  • 返回Null。

示例

$cmd = '';
if ( isset( $_REQUEST["cmd"] ) ) {
    $cmd = filter_var( $_REQUEST["cmd"], FILTER_SANITIZE_STRING );
}

答案 3 :(得分:0)

请注意,根据此票证:https://bugs.php.net/bug.php?id=54672INPUT_REQUEST 将永远不会实施。

INPUT_REQUESTINPUT_SESSION 已在 PHP 8.0 中完全删除