在变量中存储php://输入的内容

时间:2012-02-10 10:57:09

标签: php codeigniter rest http-headers

我正在尝试用PHP编辑和调整其他人的REST服务器。它基于Phil Sturgeon编写的REST Server。我几乎全身心投入,但我的要求没有按预期工作。

在服务器构造函数中是代码

switch ($this->request->method)
{
    case 'post':
    $this->_post_args = $_POST;
    $this->request->format and $this->request->body = 
                                    file_get_contents('php://input');
    break;
}

我知道php://input只能读取一次,所以在设置变量之前执行var_dump(file_get_contents('php://input'))表示我的XML数据正在从输入流中正确读取,但显然变量没有正确设置

var_dump($this->request->body)仅输出NULL!是否有一种特殊的技术可以将php://input的内容存储在变量中?

编辑:

我正在使用API Kitchen发送POST请求,并且它发送的标头是

Status: 200
X-Powered-By: PHP/5.3.2-1ubuntu4.11
Server: Apache/2.2.14 (Ubuntu)
Content-Type: application/xml
Date: Fri, 10 Feb 2012 11:00:43 GMT
Keep-Alive: timeout=15, max=100
Content-Length: 936
Connection: Keep-Alive

我无法从中看到编码是什么。

编辑3:

编码是application/x-www-form-urlencoded,这可能是问题所在!我该如何具体说明这应该是什么?

编辑2:

$this->request->method包含'post'

2 个答案:

答案 0 :(得分:4)

感谢所有帮助,事实证明,为了工作,请求的内容类型必须是application / xml,而不是application / x-www-form-urlencoded。

答案 1 :(得分:1)

如果$this->request->format评估为falseNULL0,则and运算符的后半部分不会执行。

  $this->request->format and $this->request->body = file_get_contents('php://input');
                             ^
                             |
                             +--- this part wont execute

你应该把它写成

if($this->request->format){
    $this->request->body = file_get_contents('php://input');
}

这有助于调试。