PHP7使用CURL进行文件上传,下载远程文件

2020/10/23 14:26:28MasterYi

声明

MasterYi博客文章都为原创,如需转载请复制声明原文地址博客入口http://www.masteryi.cn,感谢您的驻足!

上传端

直接COPY下方函数记得开启curl和fileinfo扩展
 /**
 * 上传附件至远程目录 请先开启curl扩展
 * @param $file  文件地址
 * @param $filename 文件名称 可使用中文命名 服务端接收值为  $_FILES["file"]["name"]
 */
function post_file($file,$filename){
    $curl = curl_init();//开启curl会话
    $file=realpath($file);//CURLFILE要求绝对路径
    $fi = new finfo(FILEINFO_MIME_TYPE);//获取mime 需开启fileinfo
    $mime = $fi->file($file);//获取mime  举例 images/jpeg
    $size = filesize($file);//获取文件大小
    $data = array(
       "file"=> new CURLFile($file, $mime, $filename),//上传前需声明文件 file代表文件提交时的名称   php接收端使用 $_FILES["file"]即可
    );
    $url = "接收地址";
    curl_setopt($curl, CURLOPT_URL, $url);//声明请求地址
    curl_setopt($curl, CURLOPT_POST, 1);//开启POST请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//需要上传文件
    curl_setopt($curl, CURLOPT_INFILESIZE,$size);//文件大小
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//声明此项 表明curl_exec结果不直接输出 存入变量中
    $result=curl_exec($curl);//执行
    if (curl_errno($curl)) {//检测是否发生错误
        echo curl_errno($curl);//输出错误码  错误码如果为26时 很大可能是文件中文路径问题
        return FALSE;
    }
    curl_close($curl);//关闭会话 释放资源
    return $result;//返回服务端处理结果 到此步一个php7的文件上传就封装好了
}


接收端

response和response_false为自定义封装的返回json函数 返回请根据自身需求去定义
$file_size=$_FILES["file"]["size"]/1024;//因为上传大小读出为字节 除以1024转为KB

if($file_size>5000){//超出限制 不允许上传
   response_false(false, "1", '上传单个大小不可超过5000KB');
}


if (is_uploaded_file($_FILES['file']['tmp_name'])) { //判断文件是否是通过 HTTP POST 上传的
  //把文件转存到你希望的目录(不要使用copy函数)
  $uploaded_file = $_FILES['file']['tmp_name'];
  //我们给每个用户动态的创建一个文件夹
  $user_path = "填写你的文件保存地址";
  //判断该用户文件夹是否已经有这个文件夹
  if (!file_exists($user_path)) {
      mkdir($user_path, 0777, true);
  }
  $file_true_name = $_FILES['file']['name'];
  $arr = explode('.', $file_true_name);//分割文件全名
  $fileExt = $arr[count($arr) - 1];//获取文件后缀名
  $newName =time() . rand(1, 1000)  . md5(date("Y-m-d") ). ".".$fileExt;//使用随机数加时间戳组成新的文件名
  $move_to_file=$user_path."/".$newName;//文件上传移动地址
  if (strstr($alowExt, $fileExt)) { //检测是否属于允许上传的文件格式 此处alowExt为自定义的文件类型,可根据自己需求做限定 strstr函数是判断是否包含
      if (move_uploaded_file($uploaded_file,$move_to_file)) { //将上传文件移动至新位置
           response(true,$this_new_url); //上传成功返回文件路径
      } else {
          response_false(false, "2", '上传失败');
      }
  } else {
      response_false(false, "3", "不允许上传后缀名为" . $fileExt . "的文件");
  }
} else {
  response_false(false, "4", '请求失败');
}


CURL下载远程文件

  /**
    *下载远程文件
    *@param $url 远程地址
    *@param $path 保存地址
    */
    function curl_downFile($url,$path){
      #下载文件
      set_time_limit(0);
      $ch = curl_init();//创建一个cURL句柄
      curl_setopt($ch, CURLOPT_URL,$url);//请求远程地址
      $fp =  fopen($path,'w+');//打开保存地址,无则创建
      curl_setopt($ch, CURLOPT_FILE, $fp);//设置输出文件地址 为上方保存地址
      curl_exec ($ch);//获取内容,
      curl_close ($ch);//关闭句柄
      fclose($fp);//释放fopen资源
    }

CURL错误码

点击下方图片前往查看


全部留言 2
masteryi.com.cn ICP证:湘ICP备19018432号-1   masteryi.cn ICP证:湘ICP备19018432号-2