使用PHP实现文件下载

       这里写了如何使用PHP实现文件下载的程序,主要是为了方便自己查找,也为了方便大家查阅学习(当然网上也有其他类似的代码)。其中详细解析看原程序注释。

PHP实现文件下载程序:

FileDownService.class.php

  1. <?php  
  2.     //封装到类  
  3.     class FileDownService {  
  4.         //下载文件的函数  
  5.   
  6.         //对函数的说明  
  7.         //参数说明 $file_name 文件名  
  8.         //         $file_sub_dir 下载文件的子路径 "/xxx/xxx/"  
  9.         function down_file($file_name$file_sub_dir) {  
  10.             //如果文件是中文的  
  11.             //原因 php文件函数,比较古老,需要对中文转码 gb2312  
  12.             $file_name=iconv("utf-8","gb2312"$file_name);  
  13.   
  14.             //使用绝对路径  
  15.             $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;  
  16.   
  17.             //1.判断文件是否存在  
  18.             if(!file_exists($file_path)) {  
  19.                 echo '文件不存在!';  
  20.                 return;  
  21.             }  
  22.   
  23.             //2.打开文件  
  24.             $fp=fopen($file_path"r");  
  25.   
  26.             //3.获取下载文件的大小  
  27.             $file_size=filesize($file_path);  
  28.   
  29.             //限制下载文件的大小  
  30.             /*if($file_size>10*1024*1024) { 
  31.                 echo "<script language='javascript'>window.alert('文件过大')</script>"; 
  32.                 return ; 
  33.             }*/  
  34.   
  35.             //4.添加http的响应信息  
  36.             //返回的是文件  
  37.             header("Content-type: application/octet-stream");  
  38.             //按照字节大小返回  
  39.             header("Accept-Ranges: bytes");  
  40.             //返回文件大小  
  41.             header("Accept-Length: ".$file_size);  
  42.             //这里客户端的弹出对话框,对应的文件名  
  43.             header("Content-Disposition: attachment; filename=".$file_name);  
  44.   
  45.             //5.向客户端回送数据  
  46.             $buffer=1024;  
  47.   
  48.             //为了下载的安全,我们最好做一个文件字节读取计数器  
  49.             $file_count=0;  
  50.             //这句话用于判断文件是否结束  
  51.             while(!feof($fp) && $file_size-$file_count>0) {  
  52.                 $file_data=fread($fp$buffer);  
  53.                 //统计读了多少个字节  
  54.                 $file_count+=$buffer;  
  55.                 //把部分数据回送给浏览器  
  56.                 echo $file_data;  
  57.             }  
  58.   
  59.             //6.关闭文件  
  60.             fclose($fp);  
  61.         }  
  62.     }  
  63. ?>  
<?php
	//封装到类
	class FileDownService {
		//下载文件的函数

		//对函数的说明
		//参数说明 $file_name 文件名
		//         $file_sub_dir 下载文件的子路径 "/xxx/xxx/"
		function down_file($file_name, $file_sub_dir) {
			//如果文件是中文的
			//原因 php文件函数,比较古老,需要对中文转码 gb2312
			$file_name=iconv("utf-8","gb2312", $file_name);

			//使用绝对路径
			$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;

			//1.判断文件是否存在
			if(!file_exists($file_path)) {
				echo '文件不存在!';
				return;
			}

			//2.打开文件
			$fp=fopen($file_path, "r");

			//3.获取下载文件的大小
			$file_size=filesize($file_path);

			//限制下载文件的大小
			/*if($file_size>10*1024*1024) {
				echo "<script language='javascript'>window.alert('文件过大')</script>";
				return ;
			}*/

			//4.添加http的响应信息
			//返回的是文件
			header("Content-type: application/octet-stream");
			//按照字节大小返回
			header("Accept-Ranges: bytes");
			//返回文件大小
			header("Accept-Length: ".$file_size);
			//这里客户端的弹出对话框,对应的文件名
			header("Content-Disposition: attachment; filename=".$file_name);

			//5.向客户端回送数据
			$buffer=1024;

			//为了下载的安全,我们最好做一个文件字节读取计数器
			$file_count=0;
			//这句话用于判断文件是否结束
			while(!feof($fp) && $file_size-$file_count>0) {
				$file_data=fread($fp, $buffer);
				//统计读了多少个字节
				$file_count+=$buffer;
				//把部分数据回送给浏览器
				echo $file_data;
			}

			//6.关闭文件
			fclose($fp);
		}
	}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值