这是检查REQUEST_METHOD的可靠方法吗?

时间:2010-08-01 15:49:45

标签: php

在我的班级AController中,我有以下方法:

private function determineRequestMethod()
{
  if($_SERVER['REQUEST_METHOD'] == 'POST')
  {
    $this->requestMethod = AController::POST;
  }
  else
  {
    $this->requestMethod = AController::GET;
  }
}

从构造函数调用此方法。 POSTGET是类常量,requestMethod是类变量。

PS - $_SERVER['REQUEST_METHOD']可以在我的服务器上运行。

我已更新方法以专门检查GET并在请求方法不是GETPOST时抛出异常:

private function determineRequestMethod()
{
    if($_SERVER['REQUEST_METHOD'] == AController::POST) 
    {
        $this->requestMethod = AController::POST;
    } 
    else if($_SERVER['REQUEST_METHOD'] == AController::GET)
    {
        $this->requestMethod = AController::GET;
    }
    else
    {
        throw new Exception('Unexpected request method [' . $_SERVER['REQUEST_METHOD'] . '].');
    }
}

3 个答案:

答案 0 :(得分:2)

是的,这是可行的,你实际上可以这样做:

private function determineRequestMethod()
{
  if($_SERVER['REQUEST_METHOD'] == 'POST')
  {
    $this->requestMethod = AController::POST;
  }
  elseif($_SERVER['REQUEST_METHOD'] == 'GET')
  {
    $this->requestMethod = AController::GET;
  }
}

如果您的课程也支持其他方法,您可能希望将其置于else条件,否则您的代码就可以了。

  

PS - $ _SERVER ['REQUEST_METHOD']确实如此   在我的服务器上工作。

它也应该在其他地方工作:)

答案 1 :(得分:1)

我不知道在PHP中检查请求方法的任何其他方法,所以我会说它是。你可能想要注意像HEAD和其他HTTP动词这样的东西 - 将它们全部视为GET可能不是你想要的。

答案 2 :(得分:-1)

为什么PHP中有一个优秀的原生输入过滤器会使生活变得复杂:filter_input()