我正在尝试上传imgur上的图片,但我经常遇到问题,而且我无法上传图片。
在我发布的代码中,我不明白为什么我一直得到布尔值:false
作为curl_exec($ch);
和不 json字符串的结果。从PHP Manual来看,这意味着帖子失败但我不明白为什么。
我在这里成功阅读了帖子请求中的图片
$imageContent = file_get_contents($myFile["tmp_name"][$i]);
if ($imageContent === false) {
// Empty image - I never get this error
} else {
//Image correctly read
$url = $this->uploadLogged($imageContent);
}
虽然这是我尝试上传
public function uploadLogged($image){
$upload_route = "https://api.imgur.com/3/image";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $upload_route);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer '.$this->access_token));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));
$response = curl_exec($ch);
$responseDecoded = json_decode($response);
curl_close ($ch);
$link = $responseDecoded->data->link;
if( empty($link) ){
throw new Exception("Cannot upload the image.<br>Response: ".json_encode($response));
}
return $link;
}
此外$this->access_token
对应有效访问令牌
答案 0 :(得分:1)
当curl_exec返回bool(false)时,传输过程中出错。要获得扩展的错误描述,请使用curl_errno()和curl_error()函数。要获得更详细的传输信息,请使用curl_setopt的CURLOPT_VERBOSE和CURLOPT_STDERR选项。例如
$curlstderrh=tmpfile();
curl_setopt_array($ch,array(CURLOPT_VERBOSE=>1,CURLOPT_STDERR=>$curlstderrh));
$response = curl_exec($ch);
$curlstderr=file_get_contents(stream_get_meta_data($curlstderrh)['uri']);
fclose($curlstderrh);
if(false===$response){
throw new \RuntimeException("curl_exec failed: ".curl_errno($ch).": ".curl_error($ch).". verbose log: $curlstderr");
}
unset($curlstderrh,$curlstderr);
应该在异常消息中为您提供libcurl error code,错误描述以及错误发生之前发生的详细日志。
常见问题包括SSL / TLS加密/解密错误,超时错误和不稳定的连接。