当前位置:  开发笔记 > 编程语言 > 正文

$ _POST vs. $ _SERVER ['REQUEST_METHOD'] =='POST'

如何解决《$_POSTvs.$_SERVER['REQUEST_METHOD']=='POST'》经验,为你挑选了4个好方法。

有人叫我的一个Snipplr提交"废话",因为我用if ($_SERVER['REQUEST_METHOD'] == 'POST')而不是if ($_POST)

检查请求方法对我来说似乎更正确,因为这是我真正想做的事情.两者之间是否存在一些操作差异,或者这仅仅是代码清晰度问题?



1> gnud..:

好吧,他们真的没有做同样的事情.

$_SERVER['REQUEST_METHOD'] 包含请求方法(惊喜).

$_POST 包含任何发布数据.

POST请求可能不包含POST数据.

我检查了请求方法 - 我实际上从没想过测试$_POST数组.不过,我检查了所需的帖子字段.所以一个空的帖子请求会给用户带来很多错误信息 - 这对我来说很有意义.


@Boldewyn不,它没有,但如果客户端在打算执行POST请求时向您发送'post'或'Post'的请求方法,那么它们违反了规范,因为HTTP方法区分大小写根据规范和规范只定义POST方法,而不是例如post或Post或pOsT方法.我在这里的答案中详细介绍了这个问题:http://stackoverflow.com/a/21511879/1709587.是否要将方法强制为大写以处理违反规范的客户端代码是您的选择.

2> stuartloxton..:

if ($_SERVER['REQUEST_METHOD'] == 'POST') 是正确的方法,你可以发送一个没有任何发布数据的帖子请求.



3> binaryLV..:

我曾经检查过,$_POST直到我遇到更大的POST数据和上传文件的麻烦.有配置指令- 如果超出任何配置指令post_max_size,则不填充数组.upload_max_filesize$_POST

所以"安全的方式"就是检查$_SERVER['REQUEST_METHOD'].你仍然必须使用isset()每个$_POST变量,无论你检查还是不检查都没关系$_SERVER['REQUEST_METHOD'].



4> DUzun..:

如果您的应用程序需要根据类型发布的请求做出反应,请使用此:

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method
    // validate request, 
    // manage post request differently, 
    // log or don't log request,
    // redirect to avoid resubmition on F5 etc
}

如果您的应用程序需要对通过邮寄请求收到的任何数据做出反应,请使用以

if(!empty($_POST)) {  // if received any post data
   // process $_POST values, 
   // save data to DB,
   // ... 
}

if(!empty($_FILES)) { // if received any "post" files
   // validate uploaded FILES
   // move to uploaded dir
   // ...
}

它是特定于实现的,但您将同时使用+ $ _FILES超全局.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有