简介:PHP上传图片,PHP使用from-data上传图片
PHP请求接口一般都是通过file_get_content函数,但是这个函数的局限性很大。除此之外还可以通过curl封装请求。
之前自己也封装过,今天重新写上传时自己却忘了具体代码,故此记录一下,方便日后学习使用:
curl封装from-data请求主要分为两个部分:第一是设置 header 头的 Content-Type 为 multipart/form-data。第二部分将请求的数据打包成form-data格式。
对于打包成form-data格式我们可以直接使用 curl 的 CURLOPT_POSTFIELDS 来实现。
具体curl代码封装如下:
public function upload($url,$post_fields)
{
$header = ['Content-Type: multipart/form-data'];
$ch = curl_init();
if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
}
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 60); //设置超时时间为60秒
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);//设置请求头
curl_setopt($ch, CURLOPT_POST, true);//设置当前请求为post类型
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_fields);//传输from-data参数
$response = curl_exec($ch);
$error=curl_error($ch);
if($error){
throw new ApiCallException($error);
}
curl_close($ch);
return $response;
}
但是上传图片时,我们不能直接将图片的路径当成参数进行传递,需要通过 curl_file_create() 函数读取文件内容,将内容赋值给参数,否则会导致服务器无法读取到图片
$param = [
'timeStamp'=>time(),
'random_str'=>Utils::genRandStr(10)
];
$file_path = '图片的绝对路径';
$param['file'] = curl_file_create($file_path);
//或者如下方法
$param['file'] = new CURLFILE($file_path);
$url = '请求连接';
$res = upload($url,$param);
var_dump($res);
需要注意的是,图片路径需要是绝对路径。此外参数 file 就是服务器接收的key的名称
有遗漏或者不对的可以在我的公众号留言哦