获取PHP删除变量

ahe*_*ang 19 php

如果我发出HTTP DELETE,我该如何访问PHP主体/变量?我知道如果您发布POST,您可以通过它访问它$_POST['varname'],但是如果它是DELETE而不是POST ,您如何访问它?假设这里的varname是ID.

xzy*_*fer 12

您可能需要直接从php://input流中读取数据.

我知道这是你必须如何处理PUT请求和一些快速谷歌搜索表明该方法也适用DELETE.

请参阅此处此处的示例.这里的评论说这个方法DELETE也适用.

这是一个有趣的代码示例,它将有所帮助(从symfony 1.4.9框架的sfWebRequest.class.php改为略微简化):

public function initialize(...) 
{
  ... code ...

  $request_vars = array();
  if (isset($_SERVER['REQUEST_METHOD']))
  {
    switch ($_SERVER['REQUEST_METHOD'])
    {
      case 'PUT':
        if ('application/x-www-form-urlencoded' === $this->getContentType())
        {
          parse_str($this->getContent(), $request_vars );
        }
        break;

      case 'DELETE':
        if ('application/x-www-form-urlencoded' === $this->getContentType())
        {
          parse_str($this->getContent(), $request_vars );
        }
        break;
    }
  ... more code ...
}

public function getContent()
{
  if (null === $this->content)
  {
    if (0 === strlen(trim($this->content = file_get_contents('php://input'))))
    {
      $this->content = false;
    }
  }

  return $this->content;
}
Run Code Online (Sandbox Code Playgroud)

此代码示例将PUTDELETE请求参数放入$request_vars数组中.一个限制似乎是表单(如果你使用另一个内容类型标题)必须是'application/x-www-form-urlencoded',一些快速的谷歌搜索证实了这一点.


dec*_*eze 6

file_get_contents('php://input')应该总是给你完整的请求体.请注意,它只能读取一次.更大的问题是DELETE请求是否可能包含一个正文,这似乎是一个未解决的问题,但可能会有效.

我会说在身体中发送id有点无REST.有问题的实体应该被URL引用example.com/foo/42,因此DELETE请求应该说DELETE /foo/42,而不是DELETE /foo请求体中的id.