浅谈网站文件下载的原理

php中文网
发布: 2016-07-29 09:08:52
原创
2179人浏览过

       今晚我们来聊聊网站文件下载的原理,下面我结合代码来给大家分析。

   function download($file_name){
 header("Content-type:text/html;charset=utf-8");
          // 可以将带中文的文件名进行编码转换,避免file_exists函数不认识中文!
 $file_name = iconv("utf-8","gb2312",$file_name);     
 $path = $_SERVER['DOCUMENT_ROOT']';        // 获取下载文件的绝对目录
 $file_path = $path.'/'.$file_name;         // 拼接将被下载的文件的路径
 if(!file_exists($file_path)){


 echo '要下载的文件不存在!';


 exit();
 }


 // 分享下载的文件,必须首先读入到内存
 // 注意:任何有关从服务器下载的文件操作,必然需要先在服务端将文件读入内存当中 

 $fp = fopen($file_path, 'r');
 $file_size = filesize($file_path);      // 获取文件的总大小
 // PHP下载文件需要用到的头
 // 通过这句代码客户端浏览器就能知道服务端返回的文件形式 

 Header("Content-type: application/octet-stream");
 Header("Accept-Ranges: bytes");       // 说明文件传输单位是字节
 Header("Accept-Length:".$file_size);    //  因为是http协议传输,因此必须指明需要接收的长度 
      
          // 告诉浏览器下载返回的文件的名称 
 Header("Content-Disposition: attachment; filename=".$file_name);
 $buffer = 1024 ;       // 避免给服务器造成很大压力,因此一次只读1024字节
 $file_count = 0;
          // feof:读取到文件结尾
 while(!feof($fp) && $file_count                 // 通过fopen,文件已经被放入内存了!现在从内存中读取fread即下载
 
 $file_content = fread($fp, $buffer);        // $file_content:每次读到的文件内容
 $file_count += $buffer;
 echo $file_content;          // echo每次读取到的内容,就好比是一点一点的下载
 }
 fclose($fp);
   }
?>

     今天我们简单的讲解了文件下载原理,希望会对大家以后做下载方面功能的时候,有些许启发,那样就足够了!

   浅谈网站文件下载的原理

以上就介绍了浅谈网站文件下载的原理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号