PHP函数封装之文件下载

  • A+
所属分类:PHP

文件下载

  1. //文件下载函数封装
  2. function down_file(string $filename,array $allowDownExt=['jpg','png','jpeg','txt','zip','gz']){
  3.     //检测下载文件是否存在,并且可读
  4.     if(!is_file($filename)||!is_readable($filename)){
  5.         return false;
  6.     }
  7.     //检测文件类型是否运行下载
  8.     //strtolower,转小写
  9.     //pathinfo 返回文件路径的信息,有一个可选参数,参数包含四个内容,本次使用的是获取扩展名
  10.     $ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
  11.     //判断要下载内容的扩展是否在数组中
  12.     if (!in_array($ext,$allowDownExt)){
  13.         return false;
  14.     }
  15.     //通过header()发送头信息
  16.     //告诉浏览器输出的是字节流
  17.     header('content-type:application/octet-stream');
  18.     //告诉浏览器返回的文件大小是按字节进行计算的
  19.     header('Accept-Ranges:bytes');
  20.     //告诉浏览器返回的文件大小
  21.     header('Accept-Length'.filesize($filename));
  22.     //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
  23.     header('Content-Dispostion:attachment;filename='.basename($filename));
  24.     //读取文件中的内容
  25.     echo readfile($filename);
  26.     exit;
  27. }

 

切片下载

  1. //文件切片下载函数封装
  2. function down_file1(string $filename,array $allowDownExt=['jpg','png','jpeg','txt','zip','gz']){
  3.     //检测下载文件是否存在,并且可读
  4.     if(!is_file($filename)||!is_readable($filename)){
  5.         return false;
  6.     }
  7.     //检测文件类型是否运行下载
  8.     //strtolower,转小写
  9.     //pathinfo 返回文件路径的信息,有一个可选参数,参数包含四个内容,本次使用的是获取扩展名
  10.     $ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
  11.     //判断要下载内容的扩展是否在数组中
  12.     if (!in_array($ext,$allowDownExt)){
  13.         return false;
  14.     }
  15.     //通过header()发送头信息
  16.     //告诉浏览器输出的是字节流
  17.     header('content-type:application/octet-stream');
  18.     //告诉浏览器返回的文件大小是按字节进行计算的
  19.     header('Accept-Ranges:bytes');
  20.     $filesize =filesize($filename);
  21.     //告诉浏览器返回的文件大小
  22.     header('Accept-Length'.$filesize);
  23.     //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
  24.     header('Content-Dispostion:attachment;filename='.basename($filename));
  25.     //规定每次读取文件的字节数为1024字节,直接输出数据
  26.     $read_buffer=1024;
  27.     $sum_buffer=0;
  28.     $handle = fopen($filename,'rb');
  29.     while (!feof($handle) && $sum_buffer < $filesize){
  30.         echo fread($handle,$read_buffer);
  31.         $sum_buffer+=$read_buffer;
  32.     }
  33.     fclose($handle);
  34.     exit;
  35. }
李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: