我有一个基于switch
的{{1}},$_SERVER['REQUEST_METHOD']
案例出现了问题。
阅读PUT
的合理方法是使用PUT
并使用php://input
或fopen
阅读。
发送到PUT的数据为file_get_contents
目前,这是我的情况:
Content-type: application/json
最棒的是,我的带有键/值对的cURL请求工作得很好。数据被填满,我的case "PUT":
parse_str(file_get_contents("php://input"), $putData);
var_dump($putData);
if(isset($_GET['id'])){
putData($_GET['id'], $putData);
} else {
print json_encode(["message" => "Missing parameter `id`."]);
http_response_code(400);
}
break;
处理好一切。
问题是我需要在这种情况下接受JSON,我该怎么办?
我的REST客户端在putData()
时抛出一个空数组。
答案 0 :(得分:2)
尝试使用json_decode而不是parse_str
case "PUT":
$rawInput = file_get_contents("php://input");
$putData = json_decode($rawInput);
if (is_null($putData)) {
http_response_code(400);
print json_encode(["message" => "Couldn't decode submission", "invalid_json_input" => $rawInput]);
} else {
if(isset($_GET['id'])){
putData($_GET['id'], $putData);
} else {
http_response_code(400);
print json_encode(["message" => "Missing parameter `id`."]);
}
}
break;
答案 1 :(得分:0)
这里只是猜测一下,但是如果你的REST客户端接受了这个请求的JSON,那么它会在var_dump()
上阻塞,它会输出一个不是JSON的字符串,直接回到响应上。尝试删除var_dump()
另外,我非常确定在将任何输出发送到客户端之前必须先调用http_response_code()
。