PHP文件下中利用header实现下载功能——w3cdream|前端学习-开发

'I'm W3cdream,创造',前·所·未·有
PHP文件下中利用header实现下载功能

发布作者:iuan   发布时间:2013-03-29   阅读次数:12451

PHP实现下载功能
很多网站基本上都会上传和下载,上传我们可以利用很多实时的上传类这样对于编程人员实现起来是非常简单快捷的方式,那么怎么样子实现下载呢,其实我们都知道的方式就是直接利用浏览器无法识别一些后缀名文件的特性直接实现下载能力,那就是直接利用了路径了,我们来来看下路径http://www.w3cdream.com/uploadfile/PHP中文手册.chm那么浏览器引将会直接将文件下载,如果有迅雷的,他会自动开启,但是这样的下载方式有缺点安全性不高,同样也有自己的有点,我们来看个利用header实现PHP问下下载的能力

 
<fieldset>
  <legend>文件下载</legend>                           
  <img src="uploads/logo.gif"/>                         <!--在页面显示要下载的图片-->
  <br/> <a href="?action=download">>>下载图片到本地</a>   <!--创建下载链接-->
  <?php
  if(isset($_GET["action"]))                             //是否单击链接
  {
  	$file_name = "logo.gif";                             //指定文件名
  	$file_dir = "uploads/";                              //指定文件路径
  	if (!file_exists($file_dir . $file_name)) {       	//检查文件是否存在
  		echo "文件找不到";                                //输出错误提示
  		exit;                                           //退出
  	} else
  	{
  		$file = fopen($file_dir . $file_name,"r");       // 打开文件
  		Header("Content-type: application/octet-stream");  		// 输入文件类型
  		Header("Accept-Ranges: bytes");                         
  		Header("Accept-Length: ".filesize($file_dir . $file_name));//输入文件大小
  		Header("Content-Disposition: attachment; filename=" . $file_name);//输入文件名称
  		echo fread($file,filesize($file_dir . $file_name));    // 开始下载
  		fclose($file);                                         // 关闭文件
  		exit;                                                    //退出
  	}
  }
?>
</fieldset>

这是实现文件下载的header的下载功能,同样我们也可以直接通过函数的形式实现下载功能,我们可以从网上找到函数,

//文件下载函数
function download($file_dir,$file_name,$file_id)
 //参数说明:
 //file_dir:文件所在目录
 //file_name:文件名
 {
     $file_dir = chop($file_dir);//去掉路径中多余的空格
     //得出要下载的文件的路径
     if($file_dir != '')
     {
         $file_path = $file_dir;
         if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
             $file_path .= '/';
         $file_path .= $file_name;
     }
    else
         $file_path = $file_name;

    //判断要下载的文件是否存在
     if(!file_exists($file_path))
     {
         echo '对不起,你要下载的文件不存在。';
         return false;
     }
     $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);
     $fp = fopen($file_path,"r");
     $buffer_size = 1024;
     $cur_pos = 0;

    while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
     {
         $buffer = fread($fp,$buffer_size);
         echo $buffer;
         $cur_pos += $buffer_size;
     }

    $buffer = fread($fp,$file_size-$cur_pos);
     echo $buffer;
     fclose($fp);
     return true;
 }


我们知道因为是通过header的方式实现的下载,所以header是作为头文件进行的,在这之前不能有任何的输出。

常用昵称:萧强,全端布道者

姓名:“刘晓强”,W3CDream创始人,目前就职于易点付。专注于web前端和移动端方面知识的研究,熟练掌握photoshop和AI,喜爱Flat UI设计和Metro UI风格,熟练掌握CSS3+HTML5技术、LESS CSS和Sass CSS,还有jQuery框架方面及一些前端框架bootstrap响应式设计等。新浪微博
友荐云推荐

PHP+MySQL网络编程

热点文章

新闻资讯

标签云

友情赞助