PHP得到PUT请求体

ala*_*din 12 php rest json

我目前正在用PHP开发Restful Json-API.我想发送一个PUT-Request items/:id来更新记录.数据将作为传输application/json.

我想用API调用API

curl -H "Content-Type: application/json" -X PUT -d '{"example" : "data"}' "http://localhost/items/someid"
Run Code Online (Sandbox Code Playgroud)

在服务器端,我无法检索请求正文.我试过了

file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)

但这会返回一个空字符串.一个fopen()/ fread()组合也不起作用.

通过POST调用时,一切都很好,我可以在服务器端完美地读取json.但API不再是Restful了.有人有解决方案吗?还有另一种发送和接收Json的方式吗?

顺便说一句,我正在使用Slim Framework开发API .

dec*_*eze 13

php://input 对于PUT请求只能读取一次:

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

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

Slim框架已根据请求读取数据.从Request对象中获取已读取的数据.

  • 非常感谢,这解决了我的问题.我可以使用$ app-> request-> getBody()获取原始数据; 然后做一个json_decode.我不知道这种方法,因为它不在文档中. (4认同)