$ _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_size
和upload_max_filesize
– 如果超过它们, $_POST
数组不会被填充。
所以“安全的方法”是检查$_SERVER['REQUEST_METHOD']
。 你仍然需要在每个$_POST
variables上使用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()
来检查它是否存在。