一个简单的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); ?>
- 一个简单的文件下载功能