设为首页 收藏本站
查看: 799|回复: 0

[经验分享] 几个php文件下载实例代码

[复制链接]

尚未签到

发表于 2017-3-31 07:44:59 | 显示全部楼层 |阅读模式
  一个简单的php文件下载源代码,虽不支持断点续传等,但是可以满足一些常用的需求了。
  php下载文件其实用一个a标签就能实现,比如 <a href="web/magento-1.8.1.0.zip">magento-1.8.1.0.zip</a> 。
  但是遇到一些浏览器能识别的格式,比如.txt,.html,.pdf等,再用<a href="web/abc.txt">abc.txt</a> 想必也知道会发生什么了。
  <?php
  /**
  * 文件下载
  *
  **/
  header("Content-type:text/html;charset=utf-8");
  download('web/magento-1.8.1.0.zip', 'magento下载');
  function download($file, $down_name){
  $suffix = substr($file,strrpos($file,'.')); //获取文件后缀
  $down_name = $down_name.$suffix; //新文件名,就是下载后的名字
  //判断给定的文件存在与否 
  if(!file_exists($file)){
  die("您要下载的文件已不存在,可能是被删除");
  } 
  $fp = fopen($file,"r");
  $file_size = filesize($file);
  //下载文件需要用到的头
  header("Content-type: application/octet-stream");
  header("Accept-Ranges: bytes");
  header("Accept-Length:".$file_size);
  header("Content-Disposition: attachment; filename=".$down_name);
  $buffer = 1024;
  $file_count = 0;
  //向浏览器返回数据 
  while(!feof($fp) && $file_count < $file_size){
  $file_con = fread($fp,$buffer);
  $file_count += $buffer;
  echo $file_con;
  } 
  fclose($fp);
  }
  ?>
  注释比较详细的代码:
  <?php
  //文件下载,下载一张图片
  //$file_name="Angel.mp3";
  $file_name="bjnihao.jpg";  //出现中文 程序无法完成下载 提示:文件不存在 
  //对文件进行转码(PHP文件函数 比较古老 需对中文码转成 gb2312)
  //iconv — Convert string to requested character encoding
  //by www.iyunv.net
  $file_name=iconv("utf-8","gb2312",$file_name);
  //设置文件下载路径(相对路径)
  //$file_path="./dowm/".$file_name;
  //使用绝对路径
  $file_path=$_SERVER['DOCUMENT_ROOT']."/http/dowm/".$file_name;
  //打开文件---先判断再操作
  if(!file_exists($file_path)){
  echo "文件不存在";
  return ; //直接退出
  }
  //存在--打开文件
  $fp=fopen($file_path,"r");
  //获取文件大小
  $file_size=filesize($file_path);
  //http 下载需要的响应头 
  header("Content-type: application/octet-stream"); //返回的文件 
  header("Accept-Ranges: bytes");   //按照字节大小返回
  header("Accept-Length: $file_size"); //返回文件大小
  header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
  //向客户端返回数据
  //设置大小输出
  $buffer=1024;
  //为了下载安全,我们最好做一个文件字节读取计数器
  $file_count=0;
  //判断文件指针是否到了文件结束的位置(读取文件是否结束)
  while(!feof($fp) && ($file_size-$file_count)>0){
  $file_data=fread($fp,$buffer);
  //统计读取多少个字节数
  $file_count+=$buffer;
  //把部分数据返回给浏览器
  echo $file_data;
  }
  //关闭文件
  fclose($fp);
  ?>
  封装函数:
  <?php
  /*
  封装函数:
  参数说明----$file_name:文件名
  $file_sub_dir:文件下载的子路径 
  */
  function file_dowm($file_name,$file_sub_dir){
  //文件转码
  $file_name=iconv("utf-8","gb2312",$file_name);
  //使用绝对路径
  $file_path=$_SERVER['DOCUMENT_ROOT']."$file_sub_dir".$file_name;
  //打开文件---先判断再操作
  if(!file_exists($file_path)){
  echo "文件不存在";
  return ; //直接退出
  }
  //存在--打开文件
  $fp=fopen($file_path,"r");
  //获取文件大小
  $file_size=filesize($file_path);
  /*
  //这里可以设置超过多大不能下载
  if($file_size>50){
  echo "文件太大不能下载";
  return ;
  }*/
  //http 下载需要的响应头 
  header("Content-type: application/octet-stream"); //返回的文件 
  header("Accept-Ranges: bytes");   //按照字节大小返回
  header("Accept-Length: $file_size"); //返回文件大小
  header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
  //向客户端返回数据
  //设置大小输出
  $buffer=1024;
  //为了下载安全,我们最好做一个文件字节读取计数器
  $file_count=0;
  //判断文件指针是否到了文件结束的位置(读取文件是否结束)
  while(!feof($fp) && ($file_size-$file_count)>0){
  $file_data=fread($fp,$buffer);
  //统计读取多少个字节数
  $file_count+=$buffer;
  //把部分数据返回给浏览器
  echo $file_data;
  }
  //关闭文件
  fclose($fp);
  }
  file_dowm("bjnihao.jpg","/http/dowm/");
  ?>
  您可能感兴趣的文章:
php header()函数的简单例子
php中header函数的用法举例详解
php header 使用详解
php header函数 文件下载时直接提示保存的代码
php header函数实现文本文件下载的方法
php header头信息应用举例
php 文件头部(header)信息详解
php使用header发送各种类型文件下载的例子
PHP header()函数使用详解
PHP中HEADER头消息详解
  另一个代码:
  public function downloads($name){
  $name_tmp = explode("_",$name);
  $type = $name_tmp[0];
  $file_time = explode(".",$name_tmp[3]);
  $file_time = $file_time[0];
  $file_date = date("Y/md",$file_time);
  $file_dir = SITE_PATH."/data/uploads/$type/$file_date/"; 
  if (!file_exists($file_dir.$name)){
  header("Content-type: text/html; charset=utf-8");
  echo "File not found!";
  exit; 
  } else {
  $file = fopen($file_dir.$name,"r"); 
  Header("Content-type: application/octet-stream");
  Header("Accept-Ranges: bytes");
  Header("Accept-Length: ".filesize($file_dir . $name));
  Header("Content-Disposition: attachment; filename=".$name);
  echo fread($file, filesize($file_dir.$name));
  fclose($file);
  }
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-357844-1-1.html 上篇帖子: PHP注释及各种语言的注释 下篇帖子: php时间戳存在8小时误差
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表