由于某种原因,我似乎无法获得json_decode来提取我需要的ID。也许我在这段代码中有语法错误?否则代码有效。如果我在两个API调用之间手动提供id,则它会成功完成。此外,我还没有真正能够轻松调试这个,因为我使用ajax和html按钮调用这个PHP函数,我根本不知道Ajax,所以我不知道如何在PHP代码中打印调试回显消息,因为我通常会看到我遇到麻烦的地方。所以基本上我正在对这个盲人进行故障排除。
基本上,代码执行初始API调用以查找标记为“VMTAG”的VM。 API调用返回该VM的JSON信息。我用json_decode提取ID,然后我做第二次API调用,使用该ID关闭VM。
function shutdown() {
$ch = curl_init('https://api.digitalocean.com/v2/droplets?tag_name=VMTAG');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer TOKENHIDDEN',
'Content-Type: application/json')
);
$json = curl_exec($ch);
$object = json_decode($json);
$id = $object['id'];
$data = array("type" => "shutdown");
$data_string = json_encode($data);
$ch = curl_init('https://api.digitalocean.com/v2/droplets/' . $id . '/actions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer TOKENHIDDEN',
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
exit;
}
答案 0 :(得分:0)
你有
$object = json_decode($json); // this gives a stdClass
$id = $object['id']; // you are using $object as an assoc. array
代替,
$object = json_decode($json,true); // now you have an assoc array and
$id = $object['id']; // $id should now be defined
查看json_decode的文档: