获取 PHP 删除变量

Posted

技术标签:

【中文标题】获取 PHP 删除变量【英文标题】:get a PHP delete variable 【发布时间】:2011-07-19 11:44:27 【问题描述】:

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

【问题讨论】:

它是***.com/questions/1405505/…的副本,但我不知道答案是否对您有帮助。 检查了,对我没有帮助 您可以在$_GET 中获取变量。如果方法不是GETPOST,请求将作为GET方法发送 我对 parse_str 的想法有一半是正确的,请参阅我的答案,以轻松解析来自 HTTP 请求正文的 PUTDELETE 请求变量。但是有一些限制。 【参考方案1】:

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

我知道对于PUT 请求,您必须这样做,并且一些快速的谷歌搜索表明该方法也适用于DELETE

有关示例,请参阅 here。评论here 说这种方法也适用于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;

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

【讨论】:

那么说做完之后,我可以通过$request_vars['id']访问它吗? 是的,基本上。您将无法按原样使用代码,因为它是大型类的一部分,但它是您所追求的模板。【参考方案2】:

file_get_contents('php://input') 应该始终为您提供完整的请求正文。请注意,它可能只能读取一次。更大的问题是 DELETE 请求是否可能包含正文,这似乎是 unanswered question,但可能会起作用。

我会说在正文中发送 id 有点 RESTless。相关实体应通过 URL 引用为 example.com/foo/42,因此 DELETE 请求应使用 DELETE /foo/42,而不是带有请求正文中 id 的 DELETE /foo

【讨论】:

那么如何获取具体的变量名呢?我必须对它进行字符串解析吗?【参考方案3】:

如上所述,PHP 确实没有有一个全局变量来快速访问DELETE 请求中的数据。为什么,我不知道;它可能没有像 GETPOST 那样被使用过。

您必须使用$_SERVER['REQUEST_METHOD'] 检查请求类型,然后使用php://input 流检索整个正文并从中提取数据。如果您想保持与您的代码类似的外观(假设您使用$_POST$_GET),您可以创建一个对每个请求执行此操作的函数并将其保存在名为$_DELETE 的全局变量中。您甚至可以修补您的 PHP 来执行此操作并编译您自己的 PHP 版本,但这当然会使试图在另一个 PHP 安装上运行您的代码的人感到困惑 :)

【讨论】:

【参考方案4】:

我认为您无法在全局可用的数组中访问它,但您可以确定请求类型,请参见此处:Detecting request type in PHP (GET, POST, PUT or DELETE)

【讨论】:

我可以检测到它就好了,我想得到 var。

以上是关于获取 PHP 删除变量的主要内容,如果未能解决你的问题,请参考以下文章

php 复习

PHP复习

如何使用 javascript/jquery 从 URL 中删除获取变量和文件名?

PHP变量

从 php 变量中删除值

PHP 内容