记录一个curl使用curl_file_create上传文件的时候遇到的坑
public function uploadFile($file){
$param = [
'agent' => AGENT,
'file' => $file
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);//上传接口url
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);//设置post请求
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//忽略ssl验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
//php5.5以后的版本有个自带的方法curl_file_create(),创建一个上传文件对象 $file = curl_file_create($_FILES['file']['tmp_name'], $_FILES['file']['type'], $_FILES['file']['name']);
uploadFile($file);
//下面是遇到的坑,主要是curl_file_create在使用的时候遇到的坑 开始使用的是CURLFile curl_file_create($filepath,'image/jpeg','test'); 但是一直返回false 后来经过反复研究curl_file_create 的参数,发现filename不是上传到服务器之后的绝对路径 CURLFile curl_file_create ( string $filename [, string $mimetype [, string $postname ]] )
这里有3个参数
filename
上传文件的路径
mimetype
文件的Mimetype
postname
文件名。
开始我以为filename使用的是上传之后文件的绝对路径,一直返回false
后来发现其实不是这么回事,把参数改成这几个就可以了,都是前端上传过来时候的文件信息
$_FILES['file']['tmp_name'], $_FILES['file']['type'], $_FILES['file']['name']
$_FILES['file']['tmp_name'],上传到php后台临时文件名
$_FILES['file']['type'],文件类型
$_FILES['file']['name'],前端上传文件名