获取 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
中获取变量。如果方法不是GET
和POST
,请求将作为GET
方法发送
我对 parse_str
的想法有一半是正确的,请参阅我的答案,以轻松解析来自 HTTP 请求正文的 PUT
和 DELETE
请求变量。但是有一些限制。
【参考方案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;
此代码示例将PUT
或DELETE
请求参数放入$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
请求中的数据。为什么,我不知道;它可能没有像 GET
和 POST
那样被使用过。
您必须使用$_SERVER['REQUEST_METHOD']
检查请求类型,然后使用php://input
流检索整个正文并从中提取数据。如果您想保持与您的代码类似的外观(假设您使用$_POST
和$_GET
),您可以创建一个对每个请求执行此操作的函数并将其保存在名为$_DELETE
的全局变量中。您甚至可以修补您的 PHP 来执行此操作并编译您自己的 PHP 版本,但这当然会使试图在另一个 PHP 安装上运行您的代码的人感到困惑 :)
【讨论】:
【参考方案4】:我认为您无法在全局可用的数组中访问它,但您可以确定请求类型,请参见此处:Detecting request type in PHP (GET, POST, PUT or DELETE)
【讨论】:
我可以检测到它就好了,我想得到 var。以上是关于获取 PHP 删除变量的主要内容,如果未能解决你的问题,请参考以下文章