一个简单的PHP文件下载方法 download

<?php
/*
 *
 *@param function downloadFile	文件下载
 * 
 *@param string $filename 下载文件的路径(根目录下的绝对路径)
 *
 *@param int $status 错误提示状态	0:提示文件名错误	1:提示整个路径错误	404:提示错误
 *
 *@param string $defaultPath 默认的路径
 *                           要下载文件所在的路径
 *                           如果为空则在$filename里面就要加上路径,不为空$filename为要下载文件的文件名即可
 * 
 */
function downloadFile($filename,$status=404,$defaultPath="/////test/"){

	header("Content-type:text/html;charset=utf-8");
	//对下载文件路径进行操作
	$filename = $defaultPath.$filename;
	$filename = trim($filename,"/");	//去除文件路径左右的‘/’
	$fileArr = explode("/",$filename);
	$file_name = $fileArr[count($fileArr)-1];	//获取文件名

	//当默认路径为空,且下载文件的路径只有文件名
	if(empty($defaultPath) && count($fileArr)==1){
		die("下载路径出错...");
	}

	$path = "";
	foreach ($fileArr as $key => $value) {
		# code...
		if($key==0){
			$value = "/".$value;	//定义第一层目录加'/',如把"aaa"转换成"/aaa"
		}
		if($key<count($fileArr)-1){
			$path .= $value."/";	//获取路径的目录,到所下载文件的目录,如"/aaa/bbb/ccc/ddd/"
		}
	}
	//var_dump($fileArr);
	//用以解决中文不能显示出来的问题
	$file_name=iconv("utf-8","gb2312",$file_name);
	$file_sub_path=$_SERVER['DOCUMENT_ROOT'].$path;
	$file_path=$file_sub_path.$file_name;

	//首先要判断给定的文件存在与否
	if(!file_exists($file_path)){
		if($status==0){
			$error_info = $file_name;	//提示文件名错误
		}elseif($status == 1){
			$error_info = $file_path;	//提示整个路径错误
		}else{
			$error_info = "";
		}
		die("文件<b>".$error_info."</b>不存在");
	}
	
	$fp=fopen($file_path,"r");
	$file_size=filesize($file_path);
	//下载文件需要用到的头
	Header("Content-type: application/octet-stream");
	Header("Accept-Ranges: bytes");
	Header("Accept-Length:".$file_size);
	Header("Content-Disposition: attachment; filename=".$file_name);
	$buffer=1024;
	$file_count=0;
	//向浏览器返回数据
	while(!feof($fp) && $file_count<$file_size){
		$file_con=fread($fp,$buffer);
		$file_count+=$buffer;
		echo $file_con;
	}
	fclose($fp);
}

$file = "ifdan.php";

downloadFile($file,1);
	
?> 

  


  • 一个简单的文件下载功能
posted @ 2014-04-18 16:57  半颠者  阅读(711)  评论(0编辑  收藏  举报