Php $POST与$服务器[';请求方法';]=';邮政';

Php $POST与$服务器[';请求方法';]=';邮政';,php,Php,有人把我提交的一份Snipplr文件称为“垃圾”,因为我使用了if($\u SERVER['REQUEST\u METHOD']==“POST”)而不是if($\u POST) 检查request方法对我来说似乎更正确,因为这是我真正想要做的。两者之间是否存在一些操作上的差异,或者这只是一个代码清晰性问题?它们都以相同的方式工作,但是应该使用$\u POST,因为它更干净。您可以向它添加isset(),以检查它是否存在。它们都是正确的。就我个人而言,我更喜欢你的方法,因为它冗长,但这实际上取决于

有人把我提交的一份Snipplr文件称为“垃圾”,因为我使用了
if($\u SERVER['REQUEST\u METHOD']==“POST”)
而不是
if($\u POST)


检查request方法对我来说似乎更正确,因为这是我真正想要做的。两者之间是否存在一些操作上的差异,或者这只是一个代码清晰性问题?

它们都以相同的方式工作,但是应该使用
$\u POST
,因为它更干净。您可以向它添加
isset()
,以检查它是否存在。

它们都是正确的。就我个人而言,我更喜欢你的方法,因为它冗长,但这实际上取决于个人偏好


立即运行
if($\u POST)
不会引发错误-无论请求是否使用
POST
头发送,
$\u POST
数组都存在。在布尔检查中,空数组被强制转换为false。

好吧,它们实际上做的不是同一件事

$\u服务器['REQUEST\u METHOD']
包含请求方法(惊喜)

$\u POST
包含任何POST数据

POST请求可能不包含POST数据


我检查了请求方法-实际上我从未想过测试
$\u POST
数组。不过,我检查了所需的post字段。因此,一个空的post请求会向用户发送大量错误消息,这对我来说是有意义的。

如果($\u SERVER['request\u METHOD']=='post')
是正确的方式,那么您可以发送一个post请求,而不需要任何post数据。

这真是一个六个五个其他情况


反对您的方法的唯一可能的理由是$\u SERVER['REQUEST\u METHOD']=='POST'可能不会在某些web服务器/配置上填充,而$\u POST数组将始终存在于PHP4/PHP5中(如果它不存在,您会遇到更大的问题(-:)

我过去经常检查
$\u POST
,直到我遇到了较大的POST数据和上载文件的问题。有配置指令
POST\u max\u size
upload\u max\u filesize
-如果超过其中任何一个,则不会填充
$\u POST
数组


因此,“安全的方法”是检查
$\u服务器['REQUEST\u方法]]
。您仍然必须在每个
$\u POST
变量上使用
isset()
,无论您是否检查
$\u服务器['REQUEST\u方法]
都可以通过按enter键提交表单(即,不点击提交按钮)在大多数浏览器中,但这并不一定会将提交作为变量发送-因此可以提交一个空表单,即
$\u POST
将为空,但表单仍会生成一个到php页面的http POST请求。在这种情况下
如果($\u服务器['request\u方法]='POST'))
更好。

如果您的应用程序需要对post类型的请求作出反应,请使用以下命令:

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
   // ...
}

如果应用程序需要对通过post请求收到的任何数据作出反应,请使用以下方法:

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
   // ...
}

它是特定于实现的,但您将同时使用+$\u文件和超全局文件。

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

只要我可能需要使用多个方法访问我的PHP脚本,我实际上要做的是:

$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");
    }
}
if (in_array($_SERVER['REQUEST_METHOD'],array("GET","POST","DELETE"))) {
// do wathever I do 
}

从理论上讲,请求方法可能是“post”(小写,甚至是混用)。PHP是否会在GET和POST上自动清理?经过一个简短的测试后,我在WinXP上的PHP5.2显然不会这样做,因此可能应该只将request_方法清理为大写。@Boldewyn不,不会,但是如果客户端在打算执行POST请求时向您发送一个'POST'或'POST'请求方法,那么它们就违反了规则对于spec,因为HTTP方法根据spec是区分大小写的,并且spec只定义POST方法,而不是POST或POST或POST方法。我在这里的回答中对此进行了更详细的说明:。您是否希望强制该方法使用大写字母来处理违反spec的客户端代码是您的选择。而且因为它们不是同一种类型g、 我们可以将它们用于不同的事情——类型和请求有效负载。我想知道这是否会让人呕吐:我使用$u服务器['request\u METHOD']来了解我们在做什么,我使用$u请求访问有效负载,这在概念之间保持了一点独立性(换句话说,我很少专门使用$\u POST或$\u GET)。@grantwparks这听起来很糟糕。$\u GET和$\u POST与数据传输的位置有更多关系。请考虑:“curl-k-L-X POST-H'Content Type:text/csv'-data binary\@sample.csv'test script.php?test=12345'”值“test”即使方法是POST,也会填充$\u GET。在这种情况下,
$\u POST
将不会为空:它将是一个具有空值的数组。
$\u POST
将始终存在,尽管它可能为空(强制转换为布尔值
false
)。那么“cleaner”是什么意思?也许他的意思是在键盘上键入的字符更少=P@vinkoVrsalovic特别是因为正如他在回答中提到的,它们是不同的($POST)是一种“黑客”在这种情况下,您可以检查是否存在仅在POST请求期间存在的数组。此外,请求方法也可以在GET等其他情况下使用。您应该在此处使用
==
而不是
=
,因为
0=='POST'
$\u服务器[“请求\u方法”]可能包含“POST”对于一些PHP+Apache2安装上的HTTP GET请求。比如我的。我就是这样来到这里的。@Tiberiu IonuțStan如果这是真的(我不相信),那是一个非常严重的错误。你能提供到PHP或Apache错误报告的链接吗?复制的步骤吗?事实上,我就是不相信你。@dave1010为什么
$\u服务器['REQUE