$ _POST与$ _SERVER =='POST'

有些人称我的一个Snipplr提交“垃圾”,因为我用if ($_SERVER['REQUEST_METHOD'] == 'POST')而不是if ($_POST)

检查请求方法似乎对我来说更为正确,因为这正是我真正想要做的。 这两者之间有一些运营差异还是仅仅是一个代码清晰度问题?

那么,他们真的不这样做。

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

$_POST包含任何发布数据。

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

我检查请求方法 – 我从来没有想过testing$_POST数组。 我检查所需的职位领域,但。 所以一个空的post请求会给用户很多错误信息 – 这对我来说是有意义的。

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

我曾经检查$_POST直到我遇到了更大的POST数据和上传文件的麻烦。 有configuration指令post_max_sizeupload_max_filesize – 如果超过它们, $_POST数组不会被填充。

所以“安全的方法”是检查$_SERVER['REQUEST_METHOD'] 。 你仍然需要在每个$_POSTvariables上使用isset() ,不pipe你检查还是不检查$_SERVER['REQUEST_METHOD']

如果您的应用程序需要根据typespost的请求做出反应

 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超全局。

您可以通过在大多数浏览器中按回车键(即不点击提交button)来提交表单,但是这不一定会将提交作为variables发送 – 所以可以提交一个空表单,即$_POST将是空的,但表单仍然会生成一个http post请求到php页面。 在这种情况下, if ($_SERVER['REQUEST_METHOD'] == 'POST')更好。

他们都是正确的。 就我个人而言,我更喜欢你的方法,因为它的详细程度,但它是真正的个人喜好。

如果($ _ POST)不会引发错误,则运行(不pipe是否使用POST标头发送请求)都存在$ _POST数组。 在布尔检查中将空数组转换为false。

 $this->method = $_SERVER['REQUEST_METHOD']; if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) { if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') { $this->method = 'DELETE'; } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') { $this->method = 'PUT'; } else { throw new Exception("Unexpected Header"); } } 

它检查页面是否通过POST调用(而不是GET,HEAD等)。 在菜单栏中键入URL时,通过GET调用页面。 但是,当您使用method =“post”提交表单时,将使用POST调用操作页面。

这其实是六分之一,另外六分之一的情况。

反对你的方法的唯一可能的参数是$ _SERVER ['REQUEST_METHOD'] =='POST'可能不会在某些Web服务器/configuration上填充,而$ _POST数组将永远存在于PHP4 / PHP5中(如果它不'不存在,你有更大的问题( – 🙂

它们都以相同的方式工作,但应该使用$_POST因为它更清洁。 你可以添加isset()来检查它是否存在。