欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php实现文件下载(支持中文文名)

程序员文章站 2022-06-22 21:06:50
复制代码 代码如下: /*======================================================  $filena...

复制代码 代码如下:

 /*======================================================
  $filename 为文件名称,必传
  $filepath 为文件路径.选填,可以为相对路径或者绝对路径
      路径只能由英文跟数据组成,不能带有中文
 ======================================================*/

<?php
 header("content-type: text/html;charset=utf-8");
 if(strlen($filename)<=3){echo "下载失败:你所以下载的文件信息有误";return;}
 $filename=iconv("utf-8","gb2312",$filename);//进行文件名格式转换,以防中文乱码
 //开始判断路径
 if(!is_null($filepath)&&strlen($filepath)>1){

  if(substr($filepath,0,1)=='/'){//判断是否为绝对路径

   $filepath=$_server['document_root'].$filepath;

    }
  if(substr($filepath,-1)!="/"){//检查最后是否为 / 结尾

   $filepath=$filepath.'/';

    }
  if(is_numeric(strpos($filepath,":\"))){//检查是否为绝对路径

   $filepath=str_replace("/","\",$filepath);

    }
   }elseif(strlen($filepath)==1&&$filepath!="/"){

    $filepath=$filepath."/";

   }else{

    $filepath="";

  }
  if(!file_exists($filepath.$filename)){

   echo"下载失败:所要下载的文件未找到";return;

   }
  /*================================================
   发送下载相关的头部信息
  =================================================*/

  header("content-type: application/octet-stream");

  header("accept-ranges: bytes");//按照字节大小返回

  header("accept-length: $filesize");//返回文件大小

  header("content-disposition: attachment; filename=".$filename);//这里客户端的弹出对话框,对应的文件名

  /*================================================
   开始下载相关
  =================================================*/
$filesize=filesize($filepath.$filename);

  $file=fopen($filepath.$filename,"r");//打开文件

  $filebuff=512;

  while($filesize>=0){

   $filesize-=$filebuff;

   echo fread($file,$filebuff);

  }

  fclose($file);
 }
?>