用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP简单文件下载函数

时间:2015-01-23  来源:西部数据  作者:西部数据

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
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门