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,一经查实,立即删除!

相关文章

excel支持python吗_没有 Python,微软宣布 Excel 新增 JavaScript 支持

CSDN”&#xff0c;选择“置顶公众号” 关键时刻&#xff0c;第一时间送达&#xff01; 去年年底曾有外媒报道&#xff0c;由于社区用户的强烈要求&#xff0c;谷歌正考虑添加 Python 作为官方的一种 Excel 脚本语言。 当时&#xff0c;谷歌开启了一个针对 Excel 功能的话题&am…

java 压缩gz_如何在Java中将.zip压缩为.gz?

我认为您可以为zip创建一个临时文件,将其添加到gzip,然后删除创建的zip.下面的代码示例应该可以帮助您.public void ZIPandGZIP(String fileName, OutputStream os, String header) throws FileNotFoundException {byte[] buffer new byte[1024];FileInputStream fis null;Fi…

解决outlook2013设置错误无法启动

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

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

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

java.util.zip_[Java 基础] 使用java.util.zip包压缩和解压缩文件

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作。我们可以使用该包中的方法&#xff0c;结合IO中的相关知识&#xff0c;进行文件的压缩和解压缩相关操作。ZipFilejava中的每一个压缩文件都是可以使用ZipFile来进行表示的。File file new File…

用好href的target, base href

<base href>就是指网页里面的相对链接 的前缀url&#xff0c;如在<head></head>部分定义了此链接为http://ent.sina.com.cn/ &#xff0c;那么下面的<a hrefaaa.html></a>代表http://ent.sina.com.cn/aaa.html 这个标签的用处是解决编程时候的相…

python遍历二维数组_在Python中遍历二维数组?

你需要告诉我们一些事情&#xff1a;dataset datas.values 它可能是一个二维数组&#xff0c;因为它来自一个csv负载。但是什么形状和数据类型&#xff1f;甚至可能是阵列的一个样本。 这是函数中的data参数吗&#xff1f; 什么是blackKings和values&#xff1f;你把它们当作列…

elementui 弹窗 显示详细信息_ElementUI中el-table双击单元格事件并获取指定列的值和弹窗显示详细信息...

场景双击el-table的某个单元格时获取此单元格的信息并弹窗显示其他关联的信息。效果如下注&#xff1a;实现首先给el-table设置cell-dblclick事件v-loading"loading":data"kqryszList"selection-change"handleSelectionChange"cell-dblclick&quo…

ESXI开启SNMP服务

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

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

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

php5.3 延迟静态绑定 static关键字

1 //传统模式 --这段代码能很好工作&#xff0c;但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧&#xff1f;2 /*3 4 abstract class DomainObject{}5 6 class User extends DomainObject7 {8 public function __construct()9 { 10 e…

java 两点间距离_Java实现控制台输出两点间距离

计算两点之间的距离然后在控制台输出&#xff0c;这个题目还是挺简单的。下面我们来看看具体代码。package com.swift;import java.util.Scanner;public class PToP {public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println("请…

微信小程序python解析获取用户手机号_python获取微信小程序openid及用户信息

填坑记录&#xff1a;1.个人微信公众订阅号是不能申请微信认证的。公众号的类型在注册时一旦选择就不能更改&#xff0c;微信公众号认证的功能除个人订阅号外&#xff0c;都可以申请认证&#xff0c;因而个人订阅号不能申请认证。这句话的意思就是个人订阅号无法开发小程序。 2…

使用 React和webpack开发和打包发布

建议在 React 中使用 CommonJS 模块系统&#xff0c;比如 browserify 或 webpack&#xff0c;本次使用 webpack。 第一步、安装全局包 $ npm install babel -g $ npm install webpack -g $ npm install webpack-dev-server -g 第二步、创建根目录 创建一个根目录&#xff0c;目…

java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)

高cpu占用1、top命令&#xff1a;Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。2、PS命令&#xff1a;Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。ps -mp pid -o THREAD,tid,…

python3 装饰器_python3_装饰器_异常处理

装饰器&#xff1a; def auth(func): def wrapper(name): 如果函数带参数&#xff0c;要加在这里 userraw_input("input passwd:").strip() if user‘test‘: print "welcome login" func(name) 如果函数带参数&#xff0c;要加在这里 else: print "a…

ZeroMQ--使用jzmq进行编程

一、环境搭建 wget http://download.zeromq.org/zeromq-2.1.7.tar.gz tar -xzf zeromq-2.1.7.tar.gz cd zeromq-2.1.7 ./configure make sudo make installgit clone https://github.com/nathanmarz/jzmq.git cd jzmq ./autogen.sh ./configure make sudo make install如果没有…

java 循环对比_Java stream 和 for 循环效率对比问题

针对同一个集合&#xff0c;用 stream 操作两次得到两个不同条件筛选出来的集合和map&#xff0c;和一次for循环就搞定搞定的效率对比。虽然stream写起来链式操作很舒服&#xff0c;但效率在不同数据量下的体现效果是不一样的&#xff0c;以下为我的测试代码&#xff1a;Testpu…

python多线程框架_基于python和bash的多线程任务框架 不要让cpu闲着了

[Bash shell] 纯文本查看 复制代码#! /bin/bash ########################################################################################################## #part1:defile your job&#xff08;第一部分&#xff0c;定义单核任务&#xff0c;需要根据你的实用任务改动&a…

FreeSWITCH第三方库(视频)的简单介绍(二)

FreeSWITCH使用了大量的第三方库&#xff0c;本文档主要介绍视频相关库的信息&#xff1a; 音频相关库的信息介绍参考&#xff1a;http://www.cnblogs.com/yoyotl/p/5486753.html 其他相关库的信息介绍参考&#xff1a;http://www.cnblogs.com/yoyotl/p/5489315.html ① openh2…