file_get_contents('php:// input')返回带有PATCH请求的空字符串

时间:2015-04-08 20:49:36

标签: php rest nginx patch

我的环境是PHP 5.5.9,Nginx 1.4.6-1ubuntu3.2,localhost。

我正在尝试从PATCH方法获取数据,但这只是返回一个空字符串... 使用POST方法可以正常工作,这是我脚本的一部分:

case 'POST':
case 'PATCH':
     $this->data = file_get_contents("php://input");

$ this->使用PATCH方法时数据为空,POST时完成数据,我使用POSTMAN chrome扩展并推送RAW数据(不是multipart / form-data)

我认为Nginx有问题......但日志文件中没有任何内容......

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我最近遇到了类似的问题,尝试访问php://input以获取PUT请求。问题很简单,我之前已经访问过它(在相关代码之前运行的日志记录函数中)。

POST的行为与其他方法不同,这解释了差异:

  

注意:在PHP 5.6之前,使用php://输入打开的流只能读取一次;流不支持搜索操作。但是,根据SAPI实现,可能会打开另一个php://输入流并重新开始读取。只有在保存了请求正文数据后才能执行此操作。通常,这是POST请求的情况,但不是其他请求方法,例如PUT或PROPFIND。

来源:http://php.net/manual/en/wrappers.php.php

解决方案很简单:将php://input的值从初始抓取存储到PHP变量,并且不要尝试为非POST请求多次运行file_get_contents("php://input")