php7 curl上傳檔案
阿新 • • 發佈:2019-02-02
php7使用curl上傳檔案返回錯誤碼26;程式碼如下:
$size = filesize($path);//檔案大小
$ch = curl_init($url);
$cfile = curl_file_create($path);
if (is_null($post_data)) {
$data = array('media' => $cfile);
}else{
$data = array('media' => $cfile,'description'=>$post_data);
}
curl_setopt($ch, CURLOPT_POST,1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_INFILESIZE,$size);
curl_setopt($ch, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 獲取的資訊以檔案流的形式返回
$info = curl_exec($ch);
if (curl_errno($ch)) {
var_dump(curl_errno($ch));
return FALSE;
}
curl_close($ch); // 關閉CURL會話
return $info; // 返回資料
我檢視手冊後使用過CURLFile函式,但返回的錯誤依然是26錯誤碼,或者是缺少多媒體問題等
$cfile = new \CURLFile($path,$upload_type,$upload_name);
解決方法:
2
php版本
-
<=5.4 curl上傳檔案只支援@語法
-
= 5.5 支援@語法和CURLFile類
-
大於=5.6 只支援CURLFile類
// 相容性寫法參考示例
$curl = curl_init();
if (class_exists('\CURLFile')) {// 這裡用特性檢測判斷php版本
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('file' => new \CURLFile(realpath($source)));//>=5.5
} else {
if (defined('CURLOPT_SAFE_UPLOAD')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
$data = array('file' => '@' . realpath($source));//<=5.5
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);