我怎么能检测到哪个请求类型被使用(GET, POST, PUT或删除)在PHP?
当前回答
可以使用下面的代码片段检测HTTP方法或所谓的REQUEST method。
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST'){
// Method is POST
} elseif ($method == 'GET'){
// Method is GET
} elseif ($method == 'PUT'){
// Method is PUT
} elseif ($method == 'DELETE'){
// Method is DELETE
} else {
// Method unknown
}
如果你更喜欢这个而不是if-else语句,你也可以使用一个开关。
如果HTML表单中需要GET或POST以外的方法,则通常使用表单中的隐藏字段来解决这个问题。
<!-- DELETE method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="DELETE">
</form>
<!-- PUT method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="PUT">
</form>
关于HTTP方法的更多信息,我想参考下面的StackOverflow问题:
HTTP协议的PUT和DELETE及其在PHP中的使用
其他回答
通过使用
$_SERVER['REQUEST_METHOD']
例子
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
要了解更多细节,请参阅$_SERVER变量的文档。
可以使用下面的代码片段检测HTTP方法或所谓的REQUEST method。
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST'){
// Method is POST
} elseif ($method == 'GET'){
// Method is GET
} elseif ($method == 'PUT'){
// Method is PUT
} elseif ($method == 'DELETE'){
// Method is DELETE
} else {
// Method unknown
}
如果你更喜欢这个而不是if-else语句,你也可以使用一个开关。
如果HTML表单中需要GET或POST以外的方法,则通常使用表单中的隐藏字段来解决这个问题。
<!-- DELETE method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="DELETE">
</form>
<!-- PUT method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="PUT">
</form>
关于HTTP方法的更多信息,我想参考下面的StackOverflow问题:
HTTP协议的PUT和DELETE及其在PHP中的使用
你可以使用getenv函数,而不必使用$_SERVER变量:
getenv('REQUEST_METHOD');
更多信息:
http://php.net/manual/en/function.getenv.php
我们还可以使用input_filter来检测请求方法,同时通过输入环境保护来提供安全性。
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
值得注意的是,即使您发送了其他类型的请求,PHP也会填充所有的$_GET参数。
上述回复中的方法是完全正确的,但是如果你想在处理POST, DELETE, PUT等请求时额外检查GET参数,你需要检查$_GET数组的大小。
推荐文章
- HTTP POST返回错误:417“期望失败。”
- 如何实现一个好的脏话过滤器?
- PHP中的三个点(…)是什么意思?
- Guzzlehttp -如何从guzzle6得到响应的正文?
- 移动一个文件到服务器上的另一个文件夹
- Laravel中使用雄辩的ORM进行批量插入
- PHP 5.4调用时引用传递-容易修复可用吗?
- 格式化字节到千字节,兆字节,千兆字节
- 如何在PHP中获得变量名作为字符串?
- 用“+”(数组联合运算符)合并两个数组如何工作?
- Laravel PHP命令未找到
- 如何修复从源代码安装PHP时未发现xml2-config的错误?
- 什么是HTTP中的“406-不可接受的响应”?
- 在PHP中对动态变量名使用大括号
- 最好的轻量级web服务器(只有静态内容)的Windows