协慌网

登录 贡献 社区

在 PHP 中检测请求类型(GET,POST,PUT 或 DELETE)

如何在 PHP 中检测使用了哪种请求类型(GET,POST,PUT 或 DELETE)?

答案

通过使用

$_SERVER['REQUEST_METHOD']

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // The request is using the POST method
}

有关更多详细信息,请参阅$ _SERVER 变量文档

PHP 中的 REST 可以非常简单地完成。创建http://example.com/test.php (概述如下)。用于 REST 调用,例如http://example.com/test.php/testing/123/hello 。这适用于 Apache 和 Lighttpd 开箱即用,不需要重写规则。

<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));

switch ($method) {
  case 'PUT':
    do_something_with_put($request);  
    break;
  case 'POST':
    do_something_with_post($request);  
    break;
  case 'GET':
    do_something_with_get($request);  
    break;
  default:
    handle_error($request);  
    break;
}

可以使用以下代码片段来检测 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语句,也可以使用switch执行此操作。

如果 html 表单中需要GETPOST以外的方法,则通常使用表单中的隐藏字段来解决此问题。

<!-- 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 中的用法