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. ?>  
相关文章
|
12月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
222 1
|
12月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
11月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
12月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
132 9
|
12月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
155 2
|
12月前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
PHP
PHP遍历文件并同步上传到服务器
在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。
172 16
|
存储 安全 数据库连接
php.ini 文件的用途是什么?
【8月更文挑战第29天】
207 1
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!