我正在尝试用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'
答案 0 :(得分:4)
感谢所有帮助,事实证明,为了工作,请求的内容类型必须是application / xml,而不是application / x-www-form-urlencoded。
答案 1 :(得分:1)
如果$this->request->format
评估为false
或NULL
或0
,则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');
}
这有助于调试。