引言:为什么知道服务器收到什么请求很重要?
\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 请求方法,使您的代码可靠且专业。
本文是为教育网站 PythonLib 编写的,但主题是通用的。我们开始吧!
\n\n什么是 HTTP 方法以及为什么要区分它们?
\nHTTP 是浏览器(或客户端)与服务器通信的协议。每个请求都有一个方法(动词),告诉服务器具体要做什么:
\n- \n
- GET — 获取数据(读取)。安全、幂等。 \n
- POST — 发送数据(创建新资源)。 \n
- PUT — 完全替换资源(更新)。 \n
- DELETE — 删除资源。 \n
- PATCH — 部分更新(较少使用)。 \n
在经典的 HTML 表单中,浏览器只支持 GET 和 POST。但在 REST API(例如,用于移动应用程序或 AJAX)中,所有方法都被广泛使用。如果您编写一个通用的后端,您需要能够区分它们。
\n\n最重要的工具:$_SERVER['REQUEST_METHOD']
\n在 PHP 中,所有关于请求的信息都存储在超全局数组 $_SERVER 中。键 REQUEST_METHOD 包含一个表示方法名称的字符串:'GET'、'POST'、'PUT'、'DELETE' 等。
这是一个基本示例:
\n<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "请求类型:" . $method;\n?>\n在您的服务器上运行此代码。如果您在浏览器中打开该页面,您将看到 GET。如果您提交一个 method="POST" 的表单,您将看到 POST。就是这么简单。
但这只是开始。让我们看看如何根据方法正确地构建逻辑。
\n\n实践示例:REST API 路由器
\n假设我们正在编写一个简单的 API 来管理待办事项列表。我们有一个端点 — /api/tasks。根据请求方法,我们执行不同的操作:
- \n
- GET — 返回所有任务的列表。 \n
- POST — 创建一个新任务。 \n
- PUT — 更新一个现有任务(完全替换)。 \n
- DELETE — 删除一个任务。 \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