PHP文件下载类


Posted in PHP onDecember 06, 2006
<?    
//====================================================    
//   使用范例:    
// $download=new download('php,exe,html',false);    
//  if(!$download->downloadfile($filename))    
//  {    
//    echo $download->geterrormsg();    
//  }          
//====================================================    
class download{    
  var $debug=true;    
  var $errormsg='';    
  var $Filter=array();    
  var $filename='';    
  var $mineType='text/plain';    
  var $xlq_filetype=array();      function download($fileFilter='',$isdebug=true)    
  {    
    $this->setFilter($fileFilter);    
        $this->setdebug($isdebug);            
        $this->setfiletype();    
  }    
  function setFilter($fileFilter)    
  {    
    if(empty($fileFilter)) return ;    
        $this->Filter=explode(',',strtolower($fileFilter));    
  }    
  function setdebug($debug)    
  {    
    $this->debug=$debug;    
  }    
  function setfilename($filename)    
  {    
    $this->filename=$filename;    
  }    
  function downloadfile($filename)    
  {    
    $this->setfilename($filename);    
    if($this->filecheck())    
        {    
          $fn = array_pop( explode( '/', strtr( $this->filename, '\\', '/' ) ) );    
          header( "Pragma: public" );    
      header( "Expires: 0" ); // set expiration time    
      header( "Cache-Component: must-revalidate, post-check=0, pre-check=0" );    
          header( "Content-type:".$this->mineType );    
      header( "Content-Length: " . filesize( $this->filename ) );    
      header( "Content-Disposition: attachment; filename=\"$fn\"" );    
      header( 'Content-Transfer-Encoding: binary' );    
      readfile( $this->filename );    
      return true;    
        }else    
        {    
        return false;    
        }    
  }    
  function geterrormsg()    
  {    
    return $this->errormsg;    
  }    
  function filecheck()    
  {    
    $filename=$this->filename;    
        if(file_exists($filename))    
        {    
           $filetype=strtolower(array_pop(explode('.',$filename)));    
           if(in_array($filetype,$this->Filter))    
           {    
             $this->errormsg.=$filename.'不允许下载!';    
                 if($this->debug) exit($filename.'不允许下载!') ;    
                 return false;    
           }else    
           {    
             if ( function_exists( "mime_content_type" ) )    
                 {    
           $this->mineType = mime_content_type( $filename );    
         }    
                 if(empty($this->mineType))    
                 {    
                    if( isset($this->xlq_filetype[$filetype]) )  $this->mineType = $this->xlq_filetype[$filetype];    
                 }    
                 if(!empty($this->mineType))    
                   return true;    
                 else    
                 {    
                    $this->errormsg.='获取'.$filename.'文件类型时候发生错误,或者不存在预定文件类型内';    
                        if($this->debug) exit('获取文件类型出错');    
                        return false;    
                 }    
           }     
        }else    
        {    
          $this->errormsg.=$filename.'不存在!';    
          if($this->debug) exit($filename.'不存在!') ;    
          return false;    
        }    
  }    
  function setfiletype()    
  {    
    $this->xlq_filetype['chm']='application/octet-stream';    
    $this->xlq_filetype['ppt']='application/vnd.ms-powerpoint';    
    $this->xlq_filetype['xls']='application/vnd.ms-excel';    
    $this->xlq_filetype['doc']='application/msword';    
    $this->xlq_filetype['exe']='application/octet-stream';    
    $this->xlq_filetype['rar']='application/octet-stream';    
    $this->xlq_filetype['js']="javascript/js";    
    $this->xlq_filetype['css']="text/css";    
    $this->xlq_filetype['hqx']="application/mac-binhex40";    
    $this->xlq_filetype['bin']="application/octet-stream";    
    $this->xlq_filetype['oda']="application/oda";    
    $this->xlq_filetype['pdf']="application/pdf";    
    $this->xlq_filetype['ai']="application/postsrcipt";    
    $this->xlq_filetype['eps']="application/postsrcipt";    
    $this->xlq_filetype['es']="application/postsrcipt";    
    $this->xlq_filetype['rtf']="application/rtf";    
    $this->xlq_filetype['mif']="application/x-mif";    
    $this->xlq_filetype['csh']="application/x-csh";    
    $this->xlq_filetype['dvi']="application/x-dvi";    
    $this->xlq_filetype['hdf']="application/x-hdf";    
    $this->xlq_filetype['nc']="application/x-netcdf";    
    $this->xlq_filetype['cdf']="application/x-netcdf";    
    $this->xlq_filetype['latex']="application/x-latex";    
    $this->xlq_filetype['ts']="application/x-troll-ts";    
    $this->xlq_filetype['src']="application/x-wais-source";    
    $this->xlq_filetype['zip']="application/zip";    
    $this->xlq_filetype['bcpio']="application/x-bcpio";    
    $this->xlq_filetype['cpio']="application/x-cpio";    
    $this->xlq_filetype['gtar']="application/x-gtar";    
    $this->xlq_filetype['shar']="application/x-shar";    
    $this->xlq_filetype['sv4cpio']="application/x-sv4cpio";    
    $this->xlq_filetype['sv4crc']="application/x-sv4crc";    
    $this->xlq_filetype['tar']="application/x-tar";    
    $this->xlq_filetype['ustar']="application/x-ustar";    
    $this->xlq_filetype['man']="application/x-troff-man";    
    $this->xlq_filetype['sh']="application/x-sh";    
    $this->xlq_filetype['tcl']="application/x-tcl";    
    $this->xlq_filetype['tex']="application/x-tex";    
    $this->xlq_filetype['texi']="application/x-texinfo";    
    $this->xlq_filetype['texinfo']="application/x-texinfo";    
    $this->xlq_filetype['t']="application/x-troff";    
    $this->xlq_filetype['tr']="application/x-troff";    
    $this->xlq_filetype['roff']="application/x-troff";    
    $this->xlq_filetype['shar']="application/x-shar";    
    $this->xlq_filetype['me']="application/x-troll-me";    
    $this->xlq_filetype['ts']="application/x-troll-ts";    
    $this->xlq_filetype['gif']="image/gif";    
    $this->xlq_filetype['jpeg']="image/pjpeg";    
    $this->xlq_filetype['jpg']="image/pjpeg";    
    $this->xlq_filetype['jpe']="image/pjpeg";    
    $this->xlq_filetype['ras']="image/x-cmu-raster";    
    $this->xlq_filetype['pbm']="image/x-portable-bitmap";    
    $this->xlq_filetype['ppm']="image/x-portable-pixmap";    
    $this->xlq_filetype['xbm']="image/x-xbitmap";    
    $this->xlq_filetype['xwd']="image/x-xwindowdump";    
    $this->xlq_filetype['ief']="image/ief";    
    $this->xlq_filetype['tif']="image/tiff";    
    $this->xlq_filetype['tiff']="image/tiff";    
    $this->xlq_filetype['pnm']="image/x-portable-anymap";    
    $this->xlq_filetype['pgm']="image/x-portable-graymap";    
    $this->xlq_filetype['rgb']="image/x-rgb";    
    $this->xlq_filetype['xpm']="image/x-xpixmap";    
    $this->xlq_filetype['txt']="text/plain";    
    $this->xlq_filetype['c']="text/plain";    
    $this->xlq_filetype['cc']="text/plain";    
    $this->xlq_filetype['h']="text/plain";    
    $this->xlq_filetype['html']="text/html";    
    $this->xlq_filetype['htm']="text/html";    
    $this->xlq_filetype['htl']="text/html";    
    $this->xlq_filetype['rtx']="text/richtext";    
    $this->xlq_filetype['etx']="text/x-setext";    
    $this->xlq_filetype['tsv']="text/tab-separated-values";    
    $this->xlq_filetype['mpeg']="video/mpeg";    
    $this->xlq_filetype['mpg']="video/mpeg";    
    $this->xlq_filetype['mpe']="video/mpeg";    
    $this->xlq_filetype['avi']="video/x-msvideo";    
    $this->xlq_filetype['qt']="video/quicktime";    
    $this->xlq_filetype['mov']="video/quicktime";    
    $this->xlq_filetype['moov']="video/quicktime";    
    $this->xlq_filetype['movie']="video/x-sgi-movie";    
    $this->xlq_filetype['au']="audio/basic";    
    $this->xlq_filetype['snd']="audio/basic";    
    $this->xlq_filetype['wav']="audio/x-wav";    
    $this->xlq_filetype['aif']="audio/x-aiff";    
    $this->xlq_filetype['aiff']="audio/x-aiff";    
    $this->xlq_filetype['aifc']="audio/x-aiff";    
    $this->xlq_filetype['swf']="application/x-shockwave-flash";    
  }    
}    
?> 
PHP 相关文章推荐
图书管理程序(三)
Oct 09 PHP
php 动态添加记录
Mar 10 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
基于PHP array数组的教程详解
Jun 05 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 #PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 #PHP
PHP分页显示制作详细讲解
Dec 05 #PHP
PHP生成静态页面详解
Dec 05 #PHP
详解:――如何将图片储存在数据库里
Dec 05 #PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 #PHP
PHP开发入门教程之面向对象
Dec 05 #PHP
You might like
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
PHP图片水印类的封装
2017/07/06 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
JS中的Replace方法使用经验分享
2015/05/20 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
应届生会计电算化求职信
2013/10/03 职场文书
大学生应聘推荐信范文
2013/11/19 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
小学中等生评语
2014/12/29 职场文书
布达拉宫导游词
2015/02/02 职场文书
离婚代理词范文
2015/05/23 职场文书
初中语文教学反思范文
2016/03/03 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
创业计划之特色精品店
2019/08/12 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS