无法在PHP中获取'http put'内容

时间:2012-03-01 09:07:38

标签: php rest backbone.js

框架就在这里 http://luracast.com/products/restler/

我正在使用restler作为我工作的宁静api, 当我使用骨干模型保存到网址时,它使用'HTTP PUT'请求方法将我的数据作为json发送和更新,我希望从我推出的内容中获得响应...

如果是HTTP POST请求方法我可以使用

// to getting content from a POST
$post_data = json_decode(file_get_contents('php://input'), true);

获取我的内容,但无法从HTTP PUT获取任何内容

// can't get anything from a PUT
function putpatients($id) {
    $post_data = file_get_contents('php://input');
    $post_data = json_decode($post_data, true);
    echo $post_data['name'];
}

浏览器响应空白

如何将数据作为json ???

返回

3 个答案:

答案 0 :(得分:6)

正如我对您的问题发表评论时,php://input是一个流,如果您从中读取,则会将其清空。

我以前从未使用过Restler但是看了下载中提供的几个例子,似乎表明提交的数据会自动作为参数传递给你的put处理程序。

在Restler的crud example中,Author类有一个像这样的put请求:

function put($id=NULL, $request_data=NULL) {
    return $this->dp->update($id, $this->_validate($request_data));
}

因此我猜测restler已经读过php://input流,因此将其清空。

所以,你的put处理程序应该更像他们的例子:

function putpatients($id, $request_data = NULL) {
    /* do something with the $request_data */
    var_dump($request_data);
}
  

编辑:@deceze实际上有一个previous SO question,它说明为什么从php输入两次输入不起作用 - 对于PUT请求 - 这解释了为什么你的代码使用了POST请求。无论哪种方式,你应该真正使用Restler提供的设施,而不是重新发明休息轮。

答案 1 :(得分:0)

您选择的开发者工具(firebug等)是否显示响应?

如果是这样,如果你放置echo json_encode($post_data['name']);而不是回声,它会有所帮助。

答案 2 :(得分:0)

尝试使用print_r()函数显示变量示例的值:

print_r($post_data);