PHP文件下载过滤类

Java代码  收藏代码
  1. <?php  
  2. /** 
  3. $filename = 'index.php'; 
  4. $download = new Download('php,exe,html', false); 
  5. if (!$download->downloadfile($filename)) { 
  6.     echo $download->getErrorMsgs(); 
  7. } 
  8. */  
  9. class Download {  
  10.     private $debug = false;  
  11.     private $errorMsg = '';  
  12.     private $filter = array();  
  13.     private $fileName = '';  
  14.     private $mineType = '';  
  15.     private $xlq_filetype = array();  
  16.     private $limitTime = 60;  
  17.   
  18.     /** 
  19.      * @param string $fileFilter 
  20.      * @param boolean $isDebug 
  21.      */  
  22.     function __construct($fileFilter = '', $isDebug = true) {  
  23.         $this->setFilter($fileFilter);  
  24.         $this->setDebug($isDebug);  
  25.         $this->setFileType();  
  26.     }  
  27.   
  28.     function downloadfile($filename) {  
  29.         $this->fileName = $filename;  
  30.         if ($this->filecheck()) {  
  31.             $fn = basename($this->fileName);  
  32.             ob_end_clean();  
  33.             @set_time_limit($this->limitTime);  
  34.             header('Cache-control: max-age=31536000');  
  35.             header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 31536000) . ' GMT');  
  36.             header('Content-Encoding: none');  
  37.             header('Content-Length: ' . filesize($this->fileName));  
  38.             header('Content-Disposition: attachment; filename=' . $fn);  
  39.             header('Content-Type: ' . $this->mineType);  
  40.             readfile($this->fileName);  
  41.             return true;  
  42.         } else {  
  43.             return false;  
  44.         }  
  45.     }  
  46.   
  47.     function filecheck() {  
  48.         $fileName = $this->fileName;  
  49.         if (file_exists($fileName)) {  
  50.             $fileType = strtolower(array_pop(explode(".", $fileName)));  
  51.             if (!in_array($fileType, $this->filter)) {  
  52.                 $this->errorMsg .= sprintf("%s 不允许下载", $fileName);  
  53.                 if ($this->debug) exit(sprintf("%s 不允许下载", $fileName));  
  54.                 return false;  
  55.             } else {  
  56.                 if (function_exists("mime_content_type")) {  
  57.                     $this->mineType = mime_content_type($fileName);  
  58.                 }  
  59.   
  60.                 if (empty($this->mineType)) {  
  61.                     if (isset($this->xlq_filetype[$fileType])) {  
  62.                         $this->mineType = $this->xlq_filetype[$fileType];  
  63.                     }  
  64.                 }  
  65.   
  66.                 if (!empty($this->mineType)) {  
  67.                     return true;  
  68.                 } else {  
  69.                     $this->errorMsg .= "获取文件类型出错";  
  70.                     if ($this->debug) exit("获取文件类型出错");  
  71.                     return false;  
  72.                 }  
  73.             }  
  74.         } else {  
  75.             $this->errorMsg .= sprintf("%s 不存在", $fileName);  
  76.             if ($this->debug) exit(sprintf("%s 不存在", $fileName));  
  77.             return false;  
  78.         }  
  79.     }  
  80.   
  81.     function setFileType() {  
  82.         $this->xlq_filetype['chm'] = 'application/octet-stream';  
  83.         $this->xlq_filetype['ppt'] = 'application/vnd.ms-powerpoint';  
  84.         $this->xlq_filetype['xls'] = 'application/vnd.ms-excel';  
  85.         $this->xlq_filetype['doc'] = 'application/msword';  
  86.         $this->xlq_filetype['exe'] = 'application/octet-stream';  
  87.         $this->xlq_filetype['rar'] = 'application/octet-stream';  
  88.         $this->xlq_filetype['js'] = "javascript/js";  
  89.         $this->xlq_filetype['css'] = "text/css";  
  90.         $this->xlq_filetype['hqx'] = "application/mac-binhex40";  
  91.         $this->xlq_filetype['bin'] = "application/octet-stream";  
  92.         $this->xlq_filetype['oda'] = "application/oda";  
  93.         $this->xlq_filetype['pdf'] = "application/pdf";  
  94.         $this->xlq_filetype['ai'] = "application/postsrcipt";  
  95.         $this->xlq_filetype['eps'] = "application/postsrcipt";  
  96.         $this->xlq_filetype['es'] = "application/postsrcipt";  
  97.         $this->xlq_filetype['rtf'] = "application/rtf";  
  98.         $this->xlq_filetype['mif'] = "application/x-mif";  
  99.         $this->xlq_filetype['csh'] = "application/x-csh";  
  100.         $this->xlq_filetype['dvi'] = "application/x-dvi";  
  101.         $this->xlq_filetype['hdf'] = "application/x-hdf";  
  102.         $this->xlq_filetype['nc'] = "application/x-netcdf";  
  103.         $this->xlq_filetype['cdf'] = "application/x-netcdf";  
  104.         $this->xlq_filetype['latex'] = "application/x-latex";  
  105.         $this->xlq_filetype['ts'] = "application/x-troll-ts";  
  106.         $this->xlq_filetype['src'] = "application/x-wais-source";  
  107.         $this->xlq_filetype['zip'] = "application/zip";  
  108.         $this->xlq_filetype['bcpio'] = "application/x-bcpio";  
  109.         $this->xlq_filetype['cpio'] = "application/x-cpio";  
  110.         $this->xlq_filetype['gtar'] = "application/x-gtar";  
  111.         $this->xlq_filetype['shar'] = "application/x-shar";  
  112.         $this->xlq_filetype['sv4cpio'] = "application/x-sv4cpio";  
  113.         $this->xlq_filetype['sv4crc'] = "application/x-sv4crc";  
  114.         $this->xlq_filetype['tar'] = "application/x-tar";  
  115.         $this->xlq_filetype['ustar'] = "application/x-ustar";  
  116.         $this->xlq_filetype['man'] = "application/x-troff-man";  
  117.         $this->xlq_filetype['sh'] = "application/x-sh";  
  118.         $this->xlq_filetype['tcl'] = "application/x-tcl";  
  119.         $this->xlq_filetype['tex'] = "application/x-tex";  
  120.         $this->xlq_filetype['texi'] = "application/x-texinfo";  
  121.         $this->xlq_filetype['texinfo'] = "application/x-texinfo";  
  122.         $this->xlq_filetype['t'] = "application/x-troff";  
  123.         $this->xlq_filetype['tr'] = "application/x-troff";  
  124.         $this->xlq_filetype['roff'] = "application/x-troff";  
  125.         $this->xlq_filetype['shar'] = "application/x-shar";  
  126.         $this->xlq_filetype['me'] = "application/x-troll-me";  
  127.         $this->xlq_filetype['ts'] = "application/x-troll-ts";  
  128.         $this->xlq_filetype['gif'] = "image/gif";  
  129.         $this->xlq_filetype['jpeg'] = "image/pjpeg";  
  130.         $this->xlq_filetype['jpg'] = "image/pjpeg";  
  131.         $this->xlq_filetype['jpe'] = "image/pjpeg";  
  132.         $this->xlq_filetype['ras'] = "image/x-cmu-raster";  
  133.         $this->xlq_filetype['pbm'] = "image/x-portable-bitmap";  
  134.         $this->xlq_filetype['ppm'] = "image/x-portable-pixmap";  
  135.         $this->xlq_filetype['xbm'] = "image/x-xbitmap";  
  136.         $this->xlq_filetype['xwd'] = "image/x-xwindowdump";  
  137.         $this->xlq_filetype['ief'] = "image/ief";  
  138.         $this->xlq_filetype['tif'] = "image/tiff";  
  139.         $this->xlq_filetype['tiff'] = "image/tiff";  
  140.         $this->xlq_filetype['pnm'] = "image/x-portable-anymap";  
  141.         $this->xlq_filetype['pgm'] = "image/x-portable-graymap";  
  142.         $this->xlq_filetype['rgb'] = "image/x-rgb";  
  143.         $this->xlq_filetype['xpm'] = "image/x-xpixmap";  
  144.         $this->xlq_filetype['txt'] = "text/plain";  
  145.         $this->xlq_filetype['c'] = "text/plain";  
  146.         $this->xlq_filetype['cc'] = "text/plain";  
  147.         $this->xlq_filetype['h'] = "text/plain";  
  148.         $this->xlq_filetype['html'] = "text/html";  
  149.         $this->xlq_filetype['htm'] = "text/html";  
  150.         $this->xlq_filetype['htl'] = "text/html";  
  151.         $this->xlq_filetype['rtx'] = "text/richtext";  
  152.         $this->xlq_filetype['etx'] = "text/x-setext";  
  153.         $this->xlq_filetype['tsv'] = "text/tab-separated-values";  
  154.         $this->xlq_filetype['mpeg'] = "video/mpeg";  
  155.         $this->xlq_filetype['mpg'] = "video/mpeg";  
  156.         $this->xlq_filetype['mpe'] = "video/mpeg";  
  157.         $this->xlq_filetype['avi'] = "video/x-msvideo";  
  158.         $this->xlq_filetype['qt'] = "video/quicktime";  
  159.         $this->xlq_filetype['mov'] = "video/quicktime";  
  160.         $this->xlq_filetype['moov'] = "video/quicktime";  
  161.         $this->xlq_filetype['movie'] = "video/x-sgi-movie";  
  162.         $this->xlq_filetype['au'] = "audio/basic";  
  163.         $this->xlq_filetype['snd'] = "audio/basic";  
  164.         $this->xlq_filetype['wav'] = "audio/x-wav";  
  165.         $this->xlq_filetype['aif'] = "audio/x-aiff";  
  166.         $this->xlq_filetype['aiff'] = "audio/x-aiff";  
  167.         $this->xlq_filetype['aifc'] = "audio/x-aiff";  
  168.         $this->xlq_filetype['swf'] = "application/x-shockwave-flash";  
  169.     }  
  170.   
  171.     function setFilter($fileFilter) {  
  172.         if (empty($fileFilter)) return;  
  173.         $this->filter = explode(",", strtolower($fileFilter));  
  174.     }  
  175.   
  176.     function setDebug($debug) {  
  177.         $this->debug = $debug;  
  178.     }  
  179.   
  180.     function setlimittime($limittime) {  
  181.         $this->limitTime = $limittime;  
  182.     }  
  183.   
  184.     function getfilename($filename) {  
  185.         return $this->fileName;  
  186.     }  
  187.   
  188.     function getErrorMsgs() {  
  189.         return $this->errorMsg;  
  190.     }  
  191.   
  192.     function __destruct() {  
  193.         $this->errorMsg = '';  
  194.     }  
  195. }  
  196. ?>  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决outlook2013设置错误无法启动

今天在新的机器上安装office 2013&#xff0c;在进行outlook2013账户设置时&#xff0c;账户设置错误导致无法正常启动outlook。 查询相关资料发现可以通过&#xff0c;控制面板用户帐户和家庭安全—邮件&#xff0c;重新设置账户即可。 相关操作如下图&#xff1a;

论文公式编号右对齐_论文不会写?最详细的论文排版技巧

说明本文根据严思奇在2017年在"重庆邮电大学硕士学位论文"撰写期间的粗陋经验总结而作。使用的word版本为word2016。在使用时&#xff0c;首先应该根据第2章&#xff0c;按照顺序设置好所有需要全局设定的内容。然后再论文写作中&#xff0c;会依次碰到参考文献、公式…

ESXI开启SNMP服务

要监控ESXI&#xff0c;打算通过snmp方式进行监控&#xff0c;这样操作比较简单。但是要使用SNMP方式进行监控&#xff0c;必须要开启ESXI的SNMP服务。ESXI由于版本号的不同&#xff0c;SNMP开启的方法也不尽相同。 我们先来介绍ESXI5.0开启方法。在开启之前&#xff0c;我们先…

fiddler修改支付金额_不容忽视的记账工具:支付宝记账

上一篇文章我们说到&#xff0c;微信记账是一个省心省力省时间的好工具&#xff0c;但平时我们的支付手段可能不只有微信&#xff0c;最常用的还有支付宝&#xff0c;例如我们在双十一淘宝上购物的话基本上使用的是支付宝进行付款&#xff0c;因此为大家普及一下支付宝的记账流…

python单步调试的方法_python断点调试方法

pdb 是 python 自带的一个包&#xff0c;为 python 程序提供了一种交互的源代码调试功能&#xff0c;主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令&#xff0c;详情见表 1。下面结合具体的实例…

数加移动定向营销:如何快速搭建不完全依赖用户历史行为的个性化服务

移动定向营销是一款基于规则引擎面向移动应用做流量精准运营的数据服务&#xff0c;能帮助使用者灵活划分用户群体、细分用户流量。移动定向营销原理它是一种定向的、人为可控的、可解释的&#xff0c;并且不完全依赖于用户历史行为、不受投放内容约束、面向用户的个性化服务方…

python读写json_python 读写json数据

json 模块提供了一种很简单的方式来编码和解码JSON 数据。 字符串操作 其中两个主要的函数是json.dumps() 和json.loads() &#xff0c;要比其他序列化函数库如pickle 的接口少得多。下面演示 1.如何将一个Python 数据结构转换为JSON 2.如何将一个JSON 编码的字符串转换回一个P…

java web逻辑删除代码_MyBatis-Plus之逻辑删除的实现

特别是互联网项目&#xff0c;对于数据一般是不能删除的(涉及到后面的数据分析)&#xff0c;这就涉及到逻辑删除。所谓逻辑删除指的是数据并不是真正的删除&#xff0c;只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或删除状态)。逻辑删除一般都是…

debian安装java jdk_Linux(Centos、Debian)之安装Java JDK及注意事项(转)

a.因为Java JDK区分32位和64位系统&#xff0c;所以在安装之前必须先要判断以下我们的Centos、Debian系统为多少位系统&#xff0c;命令如下&#xff1a;uname -a解释&#xff1a;如果有x86_64就是64位的&#xff0c;没有就是32位的。后面是X686或X86_64则内核是64位的&#xf…

python预定义_【Python】python类中方法的预定义

知乎问题&#xff1a;像这个图片里面显示的&#xff0c;self.prediction首先声明了下然后下面给出了定义&#xff0c;然后optimize又调用这个函数但是没有用self.prediction()这样的方式而是像用变量一样直接用self.prediction&#xff0c;,像请教一下这是什么操作&#xff1f;…

python md5加密_Python MD5加密实例详解

详解Python MD5加密 Python 3下MD5加密 # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str this is a md5 test. # 创建md5对象 hl hashlib.md5() # Tips # 此处必须声明encode # 若写法为hl.update(str) 报错为&…

【IOS-COCOS2D-X 游戏开发之四】COCOS2DX创建ANDROID NDK新项目并编译导入ECLIPSE中正常运行!...

本站文章均为 李华明Himi 原创,转载务必在明显处注明&#xff1a; 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/645.html此篇针对较早的-x引擎讲解的&#xff0c;最新的可以参考&#xff1a; 【Cocos2d-X(2.x) 游戏开发系列之二】cocos2dx最新2…

2天后mysql_mysql 学习笔记 第二天

插入表格数据:Insert into table_name set columns_1value1,columns_2value2,对于没有赋值的列&#xff0c;将会取默认值&#xff0c;并且这个方法只能一次插入一个数据利用文本方式插入数据:Load data local infile‘径’into table table_name&#xff1b;Select 的通用形式:…

mysql查看日志命令_面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!...

Filebeat简介Filebeat是一款轻量级日志采集器&#xff0c;可用于转发和汇总日志与文件。Filebeat内置有多种模块&#xff08;Nginx、MySQL、Redis、Elasticsearch、Logstash等&#xff09;&#xff0c;可针对常见格式的日志大大简化收集、解析和可视化过程&#xff0c;只需一条…

css 百分比 怎么固定正方形_css样式写出三角形,宽高自适应的正方形,扇形!...

闲来无事练习一下常见的css样式,希望大家能指点一二&#xff01;1用css实现一个三角形&#xff01;原理用border属性<!实现它的原理那就要弄明白border属性&#xff0c;border是一个复合属性border-width 指定边框的宽度border-style 指定边框的样式border-color 指定边框的…

用lsb_release -a 查看linux版本

1、要通过yum 安装上这个命令的软件包 yum -y install redhat-lsb 2、lsb_release -a 查看linux版本信息

linux内核_Linux内核编程风格简介

01不同的语言风格当今世界上一共有5000多种语言。不同的国家、民族和地区&#xff0c;说着不同的语言。每个民族不一定有自己的文字&#xff0c;但一般都会有自己的语言。即使是同一种语言&#xff0c;在不同的时代、不同的地区和群体&#xff0c;说话的方式和语言风格也各不相…

Swift使用CoreLocation,你必须要看这一篇

CoreLocation&#xff0c;在我们这里讨论的是一个最常用的东西&#xff0c;就是用Location Manger获取用户当前的位置。 整个的来说非常简单。只要这样&#xff1a; import CoreLocation需要使用整个框架&#xff0c;那么引入整个框架就是必须的。然后需要在你的类里实现一个pr…

python全景图像拼接_Python+OpenCV实现图像的全景拼接

本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 环境&#xff1a;python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步&#xff1a; 步骤1&#x…

非你莫属 java全球排名_TIOBE:2018年5月全球编程语言排行榜

原标题&#xff1a;TIOBE&#xff1a;2018年5月全球编程语言排行榜TIOBE 刚刚发布了 5 月编程语言排行榜。Scala 经过长时间的沉淀&#xff0c;本月终于进入了 TIOBE 榜单的前 20 名。Scala 是一种 JVM 上运行的函数式编程语言&#xff0c;可与 Java 一起或作为 Java 的替代品使…