PHP -- 文件下载

1、 简单的文件下载:

 1 <?php
 2 
 3   
 4   function file_dowload()
 5   {
 6     $file_name="滑稽.jpg";
 7     $file_name=iconv("utf-8","gb2312",$file_name);
 8     
 9     if(!file_exists($file_name))
10     { 
11         echo "文件不存在";
12         return ;
13     }
14     $fp=fopen($file_name,"r");
15     $file_size=filesize($file_name);//文件大小
16     
17     # header 部分开始 (写错的话会下载源代码文件)
18     
19     #返回的文件
20     header("Content-type: application/octet-stream");
21     //按文件大小返回
22     header("Accept-Ranges:bytes");
23     #返回文件大小
24     header("Accept-Length:$file_size");
25     //客户端对话框的文件名
26     header("Content-Disposition:attachment; filename=".$file_name);
27     
28     # header 部分结束
29   
30   
31     //向客户端回送数据
32     $buffer=1024;
33     $file_count=0;
34     //判断文件是否结束
35     while(!feof($fp)&& ($file_size-$file_count>0))
36     {
37         //依次读取每次1024字节的数据
38         $file_data=fread($fp,$buffer);
39         //统计读了多少个字节
40         $file_count+=$buffer;
41         //把部分数据传回给浏览器
42         echo $file_data;
43     }
44     //关闭文件
45     fclose($fp);    
46   }
47   file_dowload();
48   
49    //调试需要
50     //echo "<script language='javascript'>window.alert('".$file_size."')</script>";
51     //return;
52 ?>

 改进后:

 1 <?php
 2 
 3   
 4   function file_dowload($file_name,$file_sub_dir)
 5   {
 6       
 7       # ************************* 基本数据判断部分开始
 8       
 9     $file_name=iconv("utf-8","gb2312",$file_name);
10     $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name; //$_SERVER['DOCUMENT_ROOT']获得绝对路径
11     
12     if(!file_exists($file_path))
13     { 
14         echo "文件不存在";
15         return ;
16     }
17     $fp=fopen($file_path,"r");
18     $file_size=filesize($file_path);//文件大小
19     if($file_size>4417){
20         echo "<script language='javascript'>window.alert('".$file_size."')</script>";
21         return ;
22     }
23     
24     # ************************* 基本数据判断部分
25     
26     
27     #************************* header 部分开始 (写错的话会下载源代码文件)
28     
29     //返回的文件
30     header("Content-type: application/octet-stream");
31     //按文件大小返回
32     header("Accept-Ranges:bytes");
33     #返回文件大小
34     header("Accept-Length:$file_size");
35     //客户端对话框的文件名
36     header("Content-Disposition:attachment; filename=".$file_name);
37     
38     #************************* header 部分结束
39   
40   
41     #************************* 向客户端回送数据开始
42     
43     ob_clean();
44     readfile($file_path);
45     
46     //关闭文件
47     fclose($fp);    
48     
49     #************************* 向客户端回送数据结束
50   }
51   
52   #************************* 启动调用
53   file_dowload("不不不1.JPG","/images/");
54   
55    //调试需要
56     //echo "<script language='javascript'>window.alert('".$file_size."')</script>";
57     //return;
58 ?>

原文地址:https://www.cnblogs.com/daomul/p/3374070.html