有人叫我的一个Snipplr提交"废话",因为我用if ($_SERVER['REQUEST_METHOD'] == 'POST')
而不是if ($_POST)
检查请求方法对我来说似乎更正确,因为这是我真正想做的事情.两者之间是否存在一些操作差异,或者这仅仅是代码清晰度问题?
好吧,他们真的没有做同样的事情.
$_SERVER['REQUEST_METHOD']
包含请求方法(惊喜).
$_POST
包含任何发布数据.
POST请求可能不包含POST数据.
我检查了请求方法 - 我实际上从没想过测试$_POST
数组.不过,我检查了所需的帖子字段.所以一个空的帖子请求会给用户带来很多错误信息 - 这对我来说很有意义.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
是正确的方法,你可以发送一个没有任何发布数据的帖子请求.
我曾经检查过,$_POST
直到我遇到更大的POST数据和上传文件的麻烦.有配置指令- 如果超出任何配置指令post_max_size
,则不填充数组.upload_max_filesize
$_POST
所以"安全的方式"就是检查$_SERVER['REQUEST_METHOD']
.你仍然必须使用isset()
每个$_POST
变量,无论你检查还是不检查都没关系$_SERVER['REQUEST_METHOD']
.
如果您的应用程序需要根据类型发布的请求做出反应,请使用此:
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超全局.