网站地图    收藏   

主页 > php专栏 > php上传下载 >

PHP简单文件下载函数

来源:未知    时间:2014-11-27 23:52 作者:xxadmin 阅读:

[导读] php实现文件下载有许多的方法最多的就是直接显示文件路径了然后点击下载即可,另一种是利用header函数再由filesize与fopen读取文件进行下载了,这个可以实现限速下载了,但是个人认为使用...

php实现文件下载有许多的方法最多的就是直接显示文件路径了然后点击下载即可,另一种是利用header函数再由filesize与fopen读取文件进行下载了,这个可以实现限速下载了,但是个人认为使用header限速下载大文件是非常的不理想的,下面我们来看个例子.

例子,代码如下:

  1. <?php 
  2. header("Content-Type; text/html; charset=utf-8"); 
  3. class DownFile { 
  4. public static function File($_path,$file_name) { 
  5. //解决中文乱码问题 
  6. $_path=$_path.$file_name
  7. //判断文件是否存在 
  8. if (!file_exists($_path)) { 
  9. exit('文件不存在'); 
  10. $_path=iconv('utf-8','gb2312',$_path); 
  11. $file_size=filesize($_path); 
  12. $fp=fopen($_path,'r'); 
  13. header("Content-type: application/octet-stream"); 
  14. header("Accept-Ranges: bytes"); 
  15. header("Accept-Length: $file_name"); 
  16. header("Content-Disposition: attachment; filename=$file_name"); 
  17. $buffer=1024; 
  18. $file_count=0; 
  19. while (!feof($fp) && ($file_size-$file_count>0)) { 
  20. $file_data=fread($fp,$buffer); 
  21. $file_count+=$buffer
  22. echo $file_data
  23. fclose($fp); 
  24. //路径 
  25. $path='../'
  26. //文件名 
  27. $file_name='filelist.php'
  28. DownFile::File($path,$file_name); 
  29. ?> 

分析研究:使用header函数可以把像服务器端的脚本程序不需打包就可以进行下载了,像如php文件或html文件了,上面例子的核心语句是,代码如下:

  1. $_path=iconv('utf-8','gb2312',$_path); 
  2. $file_size=filesize($_path); 
  3. $fp=fopen($_path,'r'); 
  4. header("Content-type: application/octet-stream"); 
  5. header("Accept-Ranges: bytes"); 
  6. header("Accept-Length: $file_name"); 
  7. header("Content-Disposition: attachment; filename=$file_name"); 
  8. $buffer=1024; 
  9. $file_count=0; 
  10. while (!feof($fp) && ($file_size-$file_count>0)) { 
  11. $file_data=fread($fp,$buffer); 
  12. $file_count+=$buffer
  13. echo $file_data

下面三句,一个转换文件名编码这个防止中文乱码,第一个是获取文件大小,第三个是使用fopen读取文件,代码如下:

  1. $_path=iconv('utf-8','gb2312',$_path); 
  2. $file_size=filesize($_path); 
  3. $fp=fopen($_path,'r'); 

下面几行代码是告诉浏览器我们要发送的文件是什么内容与文件名,代码如下:

  1. header("Content-type: application/octet-stream"); 
  2. header("Accept-Ranges: bytes"); 
  3. header("Accept-Length: $file_name"); 
  4. header("Content-Disposition: attachment; filename=$file_name"); 

下面三行是告诉我们最大下载不能超过1MB第秒,并且循环一直下载,直到文件下载完毕即可,代码如下:

  1. $buffer=1024; 
  2. $file_count=0; 
  3. while (!feof($fp) && ($file_size-$file_count>0)) { 
  4. $file_data=fread($fp,$buffer); 
  5. $file_count+=$buffer
  6. echo $file_data
  7. //开源代码phpfensi.com
 
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论