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 ?>