php - $_SERVER ['REQUEST_METHOD' ] 是否仍然可行?

标签 php

所以,一段时间以来,我一直在使用以下方法检查我的帖子数据是否已设置。

if( ! empty( $_POST ) ) { }

但最近我看到很多帖子说上面是“hack”而下面是正确的“更好”方式。

if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }

最近我的意思是我最近才发现它。所有讨论后一种方法的帖子都来自 2009'ish。编码标准有点陈旧,所以我认为就此主题获得新的意见是可以的。

我开始明白这两种方法是不同的。第一个被认为是“hack”,它只检查是否设置了 post 数组,如果发出 post 请求就会发生这种情况。第二个实际上检查服务器以查看是否发出了发布请求。我想第二个可能更安全一些,但如果信息无论如何都被清理了,我看不出它有什么不同。

我还看到帖子说后者只在 PHP 版本 <= 4 中使用,因为此时 PHP 仍在使用 $_REQUEST 全局,这是 PHP 编码人员用来确定的方式某些请求参数的来源。我不确定最后一个陈述有多准确,因为旧帖子中提出的问题与我的相同。他们使用全局而不是请求。然而,这是一篇比其他任何一篇博文(2011 年)都更新的博文,而且来 self 信任的来源。所以我不确定该怎么做。

检查get时要做什么?我看到有几个地方说服务器请求方法在这种情况下似乎不起作用,我只能假设这是因为 post 取代了 get 并且请求方法只能包含一个参数。那么,如果您同时拥有发布数据和获取数据,您会怎么做?其中一篇帖子的评论建议使用全局请求而不是发布和获取,但我一直觉得这是个坏主意。

This是我能找到的最新来源,我是通过在提交前浏览旁边的类似问题来做到这一点的。它特别询问使用提交值来检查表单是否已通过,但它也提到了请求方法。很多似乎表明后者仍在普遍使用。那么这个建议仍然有效吗?检查请求方法仍然是最好的选择吗?

最佳答案

是的,它仍然存在,而且仍然 100% 可靠。 $_SERVER["REQUEST_METHOD"] 变量由 PHP 自己设置,基于用户连接使用的实际请求方法。除了更改请求类型之外,用户不能发送查询参数或以其他方式影响该 var 的值。

您的 if(!$_POST) 不可靠,因为它可能执行一个帖子但不发送任何数据,例如:

<form method="post">
<input type="submit" />
</form>

将生成这样一个空的 $_POST 数组 - 表单中没有命名的表单元素,因此不会发送任何数据,但仍会执行 POST。

我不会担心 PHP4 没有这个超全局。 PHP 4 是一个石器时代的版本,支持 v4 但基于 v5 构建的代码必须包含如此多的丑陋/令人作呕的 hack 才能实现向后兼容性,以至于任何必须处理该代码的人都会遭受噩梦。 PHP 4 应该被认为已经死了。

关于php - $_SERVER ['REQUEST_METHOD' ] 是否仍然可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999293/

相关文章:

php - 键入 example.com 时,域不会转到 https ://example. com

PHP CURL_Multi 检查已完成句柄的状态、删除、添加、超时

php - 在 php 中使用来自 2 个或更多组合的 SQL 查询显示记录

PHP 调用静态函数

php - WHERE DATE_FORMAT = DATE_FORMAT 不准确

php 从文本文件中获取数据

php - 尝试将 MYSQL 的表字段类型从 BLOB 更改为 JSON

php - Doctrine 中的额外 changeColumns generate-migrations-diff

php - 帮助使用带有 JS 引号的 PHP echo 语法

php - 不使用函数检测字符串结尾