首页 > 语言 > PHP > 正文

PHP文件下载的小实例

2024-09-04 11:44:45
字体:
来源:转载
供稿:网友

这个文件下载实例做得非常的详细他是结合header函数与while fread函数把文件分断读出来然后再发送到客户端了,算得上一个标准的文件下载实例。

一个PHP文件下载的小实例

  1. /*====================================================== 
  2.   $FileName 为文件名称,必传 
  3.   $FilePath 为文件路径.选填,可以为相对路径或者绝对路径 
  4.       路径只能由英文跟数据组成,不能带有中文 
  5.             如有问题 欢迎联系博主指出 
  6.  ======================================================*/ 
  7.  代码如下 复制代码 
  8. <?php  
  9.  header("Content-type: text/html;charset=utf-8"); 
  10.  if(strlen($FileName)<=3){echo "下载失败:你所以下载的文件信息有误";return;} 
  11.  $FileName=iconv("utf-8","gb2312",$FileName);//进行文件名格式转换,以防中文乱码 
  12.  //开始判断路径 
  13.  if(!is_null($FilePath)&&strlen($FilePath)>1){ 
  14.    
  15.   if(substr($FilePath,0,1)=='/'){//判断是否为绝对路径 
  16.    
  17.    $FilePath=$_SERVER['DOCUMENT_ROOT'].$FilePath
  18.     
  19.     } 
  20.   if(substr($FilePath,-1)!="/"){//检查最后是否为 / 结尾 
  21.    
  22.    $FilePath=$FilePath.'/'
  23.     
  24.     } 
  25.   if(is_numeric(strpos($FilePath,":/"))){//检查是否为绝对路径 
  26.    
  27.    $FilePath=str_replace("/","/",$FilePath); 
  28.     
  29.     } 
  30.    }elseif(strlen($FilePath)==1&&$FilePath!="/"){ 
  31.      
  32.     $FilePath=$FilePath."/"
  33.      
  34.    }else
  35.      
  36.     $FilePath=""
  37.      
  38.   } 
  39.   if(!file_exists($FilePath.$FileName)){ 
  40.     
  41.    echo"下载失败:所要下载的文件未找到";return
  42.     
  43.    } 
  44.   /*================================================ 
  45.    发送下载相关的头部信息 
  46.   =================================================*/ 
  47.    
  48.   header("Content-type: application/octet-stream"); 
  49.    
  50.   header("Accept-Ranges: bytes");//按照字节大小返回 
  51.    
  52.   header("Accept-Length: $FileSize");//返回文件大小 
  53.    
  54.   header("Content-Disposition: attachment; filename=".$FileName);//这里客户端的弹出对话框,对应的文件名 
  55.    
  56.   /*================================================ 
  57.    开始下载相关 
  58.   =================================================*/  
  59. $FileSize=filesize($FilePath.$FileName); 
  60.    
  61.   $File=fopen($FilePath.$FileName,"r");//打开文件 
  62.    
  63.   $FileBuff=512; 
  64.    
  65.   while($FileSize>=0){ 
  66.     
  67.    $FileSize-=$FileBuff
  68.     
  69.    echo fread($File,$FileBuff); 
  70.     
  71.   } 
  72.     
  73.   fclose($File); 
  74.  } 
  75. ?> 

总结:本下载实例并且支持中文文名了,在文件开头就进行了uft8编码转换了.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表