所以,有一段时间我一直在使用以下内容来检查我的帖子数据是否已设置.
if( ! empty( $_POST ) ) { }
Run Code Online (Sandbox Code Playgroud)
但最近我看到很多帖子说上面的内容是"黑客",下面是正确的"更好"的方式.
if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }
Run Code Online (Sandbox Code Playgroud)
到最近,我只是说我最近才找到它.正在讨论这个后来方法的所有帖子都来自2009年.编码标准有点旧,所以我觉得可以对这个主题有一个新的看法.
我明白这两种方法是不同的.第一个被认为是"hack",只检查是否已经设置了post数组,如果发出了post请求,就会发生这种情况.第二个实际上检查服务器以查看是否已发出发布请求.我想第二个可能会更安全,但如果信息被清理干净,我看不出它有多大区别.
我也看过后者仅用于PHP版本<= 4的帖子,因为此时PHP仍在使用$_REQUEST全局,这就是PHP编码器用来确定某些请求参数的来源的方式.我不确定最后一个陈述是多么准确,因为旧帖子中提出的问题与我的相同.他们使用post global而不是request.然而,这是一个比其他任何一个(2011年)更新的帖子,并且从我开始信任的来源.所以我不知道该怎么做.
检查get时该怎么办?我已经看到有几个地方说服务器请求方法在这个实例中似乎不起作用,我只能假设它是因为post superscedes get而请求方法只能容纳一个参数.所以,如果您同时发布和获取数据,您会做什么?对其中一篇帖子的评论建议使用全局请求而不是发布和获取,但我一直认为这是一个坏主意.
这是我能找到的最新资料,我在提交之前通过查看侧面的类似问题这样做了.它特别询问使用提交值来检查表单是否已通过,但它也提到了请求方法.很多似乎表明后者仍然被普遍使用.这个建议仍然有效吗?检查请求方法仍然是最佳选择吗?
Mar*_*c B 10
是的,它仍然存在,它仍然100%可靠.该$_SERVER["REQUEST_METHOD"]变种是由PHP本身设定,基于用户的连接使用的实际请求方法.除了通过更改请求的类型之外,用户不能发送查询参数或以其他方式影响该var的值.
你if(!$_POST)是不可靠的,因为它IS可以执行后,但不能跨越它发送任何数据,例如:
<form method="post">
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
将生成这样一个空的$ _POST数组 - 表单中没有命名的表单元素,因此不会发送任何数据,但仍然会执行POST.
我不担心PHP4没有这个超全球.PHP 4是一个石器时代版本,支持v4但基于v5构建的代码必须包含许多丑陋/恶心的黑客以实现向后兼容性,任何必须处理该代码的人都会遭受噩梦.PHP 4应该被认为已经死了.
我总是使用$_SERVER['REQUEST_METHOD'];变量来检查请求方法.
此变量还表示请求是否为' GET',' HEAD',' POST'或' PUT''请求.
http://php.net/manual/en/reserved.variables.server.php
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |