可能的重复:PHP检测请求类型(GET,POST,PUT或DELETE)




这应该很容易。

我有一个脚本,在脚本中我想确定请求是通过GET还是POST方法到达的。

正确的方法是什么?

我正在考虑使用类似的方法

if (isset($_POST)) {
    // do post
} else  {
    // do get
}


但是我内心深处并不觉得这是正确的方法。有什么主意吗?

评论

如果无论处理请求类型如何都将处理变量作为目标,为什么不能尝试$ _REQUEST [“ variable_name”]?

@AnoopPete-因为那不是被要求的。 $ _REQUEST将接受GET,POST,PUT,DELETE(任何内容)。这种可怕的做法不仅会导致安全风险。想象一下,您的逻辑只是期望表单POST方法,但是您允许任何/所有方法都被接受。如果使用不当,可能会造成可怕的后果。

尝试使用它可以帮助您获取或发布表单if($ _REQUEST [“ name”] || $ _REQUEST [“ age”]){echo“ Welcome”。 $ _REQUEST ['name']。 “
”;回声“你是”。 $ _REQUEST ['age']。 “岁。”出口(); }

#1 楼

更好地使用$_SERVER['REQUEST_METHOD']

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // …
}


评论


@Gumbo我们需要===,如果我使用==会发生什么

– Kasun Siyambalapitiya
2016年9月6日上午10:36

您可以使用===或==。前者只是一个好习惯,因为它检查变量是否“相同”。 (例如:5 =='5'为true,但5 ==='5'为false)

–贾斯汀
16-09-19在22:41

如果既不是GET也不是POST,也请考虑返回405。 if($ _SERVER ['REQUEST_METHOD'] ==='POST'){//做过} elseif($ _SERVER ['REQUEST_METHOD'] ==='GET'){//做过} else {http_response_code(405) ;死(); }

–安德鲁·唐斯(Andrew Downes)
17年1月6日在18:20



根据NetBeans IDE,直接访问$ _SERVER不好。因此,在这种情况下,替代方法是if(filter_input(INPUT_SERVER,'REQUEST_METHOD')==='POST'){…}。

– ban-geoengineering
17-4-27在12:51



我遇到过PHP无法主动设置$ _POST全局变量的环境,因此我同意使用上述方法的工作更为可靠。

–内森·克劳斯(Nathan Crause)
17年7月5日在15:52

#2 楼

使用$_SERVER['REQUEST_METHOD']