可能的重复:PHP检测请求类型(GET,POST,PUT或DELETE)
这应该很容易。
我有一个脚本,在脚本中我想确定请求是通过
GET
还是POST
方法到达的。 正确的方法是什么?
我正在考虑使用类似的方法
if (isset($_POST)) {
// do post
} else {
// do get
}
但是我内心深处并不觉得这是正确的方法。有什么主意吗?
#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']
。
评论
如果无论处理请求类型如何都将处理变量作为目标,为什么不能尝试$ _REQUEST [“ variable_name”]?@AnoopPete-因为那不是被要求的。 $ _REQUEST将接受GET,POST,PUT,DELETE(任何内容)。这种可怕的做法不仅会导致安全风险。想象一下,您的逻辑只是期望表单POST方法,但是您允许任何/所有方法都被接受。如果使用不当,可能会造成可怕的后果。
尝试使用它可以帮助您获取或发布表单if($ _REQUEST [“ name”] || $ _REQUEST [“ age”]){echo“ Welcome”。 $ _REQUEST ['name']。 “
”;回声“你是”。 $ _REQUEST ['age']。 “岁。”出口(); }