我怎么能检测到哪个请求类型被使用(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数组的大小。