php使用curl实现form-data上传图片

简介: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的名称

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1