在 PHP 中确定 HTTP 请求类型:GET、POST、PUT、DELETE — 全面解析

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么知道服务器收到什么请求很重要?

\n\n

想象一下,您是一栋高档住宅的门卫。不同的人来找您:有些人只是想查看住户名单 (GET),有些人想添加新住户 (POST),有些人想更新数据 (PUT),还有些人想删除记录 (DELETE)。如果您搞混了这些操作,就会一片混乱。当您用 PHP 构建现代 Web 应用程序或 REST API 时,情况大致相同。

\n\n

“在 PHP 中检测请求类型 (GET、POST、PUT 或 DELETE)”这个问题是 Stack Overflow 上最热门的问题之一(有数千次浏览)。这并非偶然。新手经常写 if ($_POST),然后在收到 PUT 或 DELETE 请求时遇到错误。今天,我们将一劳永逸地弄清楚如何在 PHP 中正确地确定 HTTP 请求方法,使您的代码可靠且专业。

\n\n

本文是为教育网站 PythonLib 编写的,但主题是通用的。我们开始吧!

\n\n

什么是 HTTP 方法以及为什么要区分它们?

\n

HTTP 是浏览器(或客户端)与服务器通信的协议。每个请求都有一个方法(动词),告诉服务器具体要做什么:

\n
    \n
  • GET — 获取数据(读取)。安全、幂等。
  • \n
  • POST — 发送数据(创建新资源)。
  • \n
  • PUT — 完全替换资源(更新)。
  • \n
  • DELETE — 删除资源。
  • \n
  • PATCH — 部分更新(较少使用)。
  • \n
\n

在经典的 HTML 表单中,浏览器只支持 GET 和 POST。但在 REST API(例如,用于移动应用程序或 AJAX)中,所有方法都被广泛使用。如果您编写一个通用的后端,您需要能够区分它们。

\n\n

最重要的工具:$_SERVER['REQUEST_METHOD']

\n

在 PHP 中,所有关于请求的信息都存储在超全局数组 $_SERVER 中。键 REQUEST_METHOD 包含一个表示方法名称的字符串:'GET'、'POST'、'PUT'、'DELETE' 等。

\n\n

这是一个基本示例:

\n
<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "请求类型:" . $method;\n?>
\n

在您的服务器上运行此代码。如果您在浏览器中打开该页面,您将看到 GET。如果您提交一个 method="POST" 的表单,您将看到 POST。就是这么简单。

\n\n

但这只是开始。让我们看看如何根据方法正确地构建逻辑。

\n\n

实践示例:REST API 路由器

\n

假设我们正在编写一个简单的 API 来管理待办事项列表。我们有一个端点 — /api/tasks。根据请求方法,我们执行不同的操作:

\n
    \n
  • GET — 返回所有任务的列表。
  • \n
  • POST — 创建一个新任务。
  • \n
  • PUT — 更新一个现有任务(完全替换)。
  • \n
  • DELETE — 删除一个任务。
  • \n
\n\n

代码实现如下:

\n
<?php\n// 确定请求方法\n$method = $_SERVER['REQUEST_METHOD'];\n\n// 路由\nswitch ($method) {\n    case 'GET':\n        // 处理 GET 请求\n        echo "显示任务列表...";\n        // 此处是从数据库获取数据的逻辑\n        break;\n\n    case 'POST':\n        // 处理 POST 请求\n        echo "创建新任务...";\n        // $_POST 包含表单数据\n        $title = $_POST['title'] ?? '';\n        // 保存到数据库的逻辑\n        break;\n\n    case 'PUT':\n        // 处理 PUT 请求\n        echo "更新任务...";\n        // 重要:PUT 数据不会进入 $_POST!\n        // 需要从 php://input 读取\n        $pu                

博客

书籍推荐