php实现文件下载(支持中文文名)
/*======================================================
$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);
}
?>
上一篇: CodeIgniter生成网站sitemap地图的方法
下一篇: 测试php函数的方法