【问题标题】:Can't get 'http put' content in PHP无法在 PHP 中获取“http put”内容
【发布时间】:2012-03-01 09:07:37
【问题描述】:

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

我在工作中使用restler 作为restful api, 当我使用主干模型保存到 url 时,它使用“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 ???

【问题讨论】:

  • 抱歉,不确定问题所在。 input 是空白的吗? 输出 是空白的吗?客户端是空白的吗?
  • php://input 是一个流,如果你从中读取,它将清空它。你可能已经读过它了吗?如果是这种情况,第二个 file_get_contents('php://input') 将返回 ''

标签: php rest backbone.js


【解决方案1】:

正如我对您的问题的评论,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://input 读取两次不起作用 - 对于 PUT 请求 - 这解释了为什么您的代码与 POST 请求一起工作。无论哪种方式,您都应该真正使用 Restler 提供的工具,而不是重新发明其余的轮子。

【讨论】:

  • 天哪,它正在工作......我曾经使用这个函数 function putpatients($id, $data = NULL) { /* 对 $request_data 做一些事情 */ var_dump($data); } 但什么也不返回,这都是关于参数名称的。好的,我明白了。
  • @crapthings。嗯,我不认为参数的实际名称应该改变任何东西,可能是一个不同的问题。但是,嘿,如果它没有坏的话..
【解决方案2】:

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

如果是这样,如果您输入 echo json_encode($post_data['name']); 而不是您的回声会有所帮助。

【讨论】:

  • chrome 我用过 var_dump(file_get_contents('php://input'));那么我得到的是 string(0) ""
【解决方案3】:

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

print_r($post_data);

【讨论】:

  • 空白变量内容?怎么了 ?我确定我做了一个 HTTP PUT REQUEST_METHOD,但我就是不能返回我放的东西。
猜你喜欢
  • 2018-07-15
  • 2021-12-09
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2011-04-12
  • 2014-10-20
相关资源
最近更新 更多