ホームページ  >  記事  >  バックエンド開発  >  PHPファイルアップロードフィルタクラス

PHPファイルアップロードフィルタクラス

WBOY
WBOYオリジナル
2016-06-13 13:03:141431ブラウズ

PHP ファイル ダウンロード フィルター クラス

<?php
	/**
	 * file download class
	 * Create Time:06/23/2009
	 * Author:DAKER.W
	 * QQ:451021477
	
	 */
	class Download{
		private $debug			= false;
		private $errorMsg		= '';	
		private $filter			= array();
		private $fileName		= '';
		private $mineType		= '';
		private $xlq_filetype	= array();
		private $limitTime		= 60;
		/**
		 * @param string $fileFilter 
		 * @param boolean $isDebug
		 */
		function __construct($fileFilter='', $isDebug=true)
		{
			$this->setFilter($fileFilter);
			$this->setDebug($isDebug);
			$this->setFileType();
		}
		
		function downloadfile($filename)
		{
			$this->fileName		= $filename;
			if($this->filecheck()){
				$fn				= basename($this->fileName);
				ob_end_clean();
				@set_time_limit($this->limitTime);
				header('Cache-control: max-age=31536000');
				header('Expires: '.gmdate('D, d M Y H:i:s',time()+31536000).' GMT');
				header('Content-Encoding: none');
				header('Content-Length: '.filesize($this->fileName));
				header('Content-Disposition: attachment; filename='.$fn);
				header('Content-Type: '.$this->mineType);
				readfile($this->fileName);
				return true;
			}else{
				return false;
			}
		}
		
		function filecheck()
		{
			$fileName		= $this->fileName;
			if(file_exists($fileName)){
				$fileType	= strtolower(array_pop(explode(".", $fileName)));
				if(!in_array($fileType, $this->filter)){
					$this->errorMsg	.= sprintf("%s can't download!", $fileName);
					if($this->debug)exit(sprintf("%s can't download!", $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			.= "Can't get file type!";
						if($this->debug)exit("Can't get file type!");
						return false;													
					}
				}				
			}else {
				$this->errorMsg				.= sprintf("%s isn't exists!", $fileName);
				if($this->debug)exit(sprintf("%s isn't exists!", $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']="javascrīpt/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";
		}
		
		function setFilter($fileFilter)
		{
			if(empty($fileFilter))return ;
			$this->filter	= explode(",", strtolower($fileFilter));
		}
		
		function setDebug($debug)
		{
			$this->debug	= $debug;
		}
		
		function setlimittime($limittime)
		{
			$this->limitTime	= $limittime;
		}
		
		function getfilename($filename)
		{
			return  $this->fileName;
		}
		
		function getErrorMsgs()
		{
			return $this->errorMsg;	
		}
		
		function __destruct()
		{
			$this->errorMsg			= '';
		}
	}
?>

//?? 使用例:

?$filename='data.rar';
?$download=新しいダウンロード('php,exe,html',false);
? if(!$download->downloadfile($filename,'data'))
? {
????????? echo $download->geterrormsg();
?}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。