PHP 上传文件类

<?php
/**
 * 
 * @name upload.class.php
 * 上传文件类
 * @author Peter
 * @createtime 2014-11-20 10:30:29
 * 
 */
class upload{
	
	public $max_size; //上传file大小
	
	public $allow_types; //上传文件类型
	
	public $file_name; //文件名
	
	public $errmsg; //错误提示
	
	public $uploaded; //后的文件名
		
	public $save_path; //上传文件保存路径
	
	private $file_type; //文件类型
	
	private $ext; //上传文件扩展名
	
	/*
	 * 构造函数
	 * @access public
	 * @string $save_path 上传目标文件
	 * @string $file_name 上传后的文件名
	 * @string $allow_types 允许上传的文件类型
	 * */
	
	function __construct($save_path = "./upload/",$file_name=‘date‘,$allow_types = ‘‘)
	{
		$this->file_name = $file_name;//默认用时间命名
		$this->save_path = (preg_match(‘/\/$/‘,$save_path))?$save_path:$save_path.‘/‘;
		$this->allow_types = $allow_types == ‘‘ ? ‘jpg|gif|png‘ : $allow_types;
		$this->max_size = 1024*1024*2;
	}
	
	/*
	 * 上传文件
	 * @access public
	 * @param $file 等待上传的文件
	 * @return Boolean
	 * */
	 
	 public function upload_file($files)
	 {
	 	$info = $_FILES[$files];
		
		$name = $info[‘name‘];
		$type = $info[‘type‘];
		$tmp_name = $info[‘tmp_name‘];
		$error = $info[‘error‘];
		$size = $info[‘size‘];
		
		switch ($error) {
			case ‘0‘:
				$this->errmsg = ‘‘;
				break;
			case ‘1‘:
				$this->errmsg = ‘文件大小超过了php.ini中的限制‘;
				break;
			case ‘2‘:
				$this->errmsg = ‘文件大小超过了浏览器的限制‘;
				break;
			case ‘3‘:
				$this->errmsg = ‘文件部分被上传‘;
				break;
			case ‘4‘:
				$this->errmsg = ‘没有找到要上传的文件‘;
				break;
			case ‘5‘:
				$this->errmsg = ‘文件写入临时文件出错‘;
				break;
			default:
				$this->errmsg = "文件上传错误";
				break;
		}
		
		if($error == 0 && is_uploaded_file($tmp_name)){
			
			if($this->check_file_type($name) == false){
				return false;
			}
			
			if($size > $this->max_size){
				$this->errmsg = "上传文件<font color=‘red‘>".$name."</font>太大";
				return false;
			}
			
		}
		
		$this->set_save_path();
		
		$new_name = $this->file_name != ‘date‘ ? $this->file_name.‘.‘.$this->ext : date(‘YmdHis‘).‘.‘.$this->ext;//设置新文件名
		
		$this->uploaded = $this->save_path.$new_name;//上传后的文件名 
		//移动文件 
		if(move_uploaded_file($tmp_name,$this->uploaded)){ 
			$this->errmsg = ‘文件<font color=red>‘.$this->uploaded.‘</font>上传成功!‘; 
			return true; 
		}else{ 
			$this->errmsg = ‘文件<font color=red>‘.$this->uploaded.‘</font>上传失败!‘; 
			return false; 
		}
	 }
	 
	 /*
	  * 检查上传文件类型
	  * @access private
	  * @param string $filename 等待检查的文件名
	  * @return 如果通过返回true 不通过返回false
	  * */
	 
	 private function check_file_type($filename)
	 {
	 	$ext = $this->get_file_type($filename);
		
		$this->ext = $ext;
		
		$allow_types = explode(‘|‘, $this->allow_types);//允许上传文件类型用|分割
		
		if(in_array($ext, $allow_types)){
			return true;
		}else{
			$this->errmsg = "上传文件".$filename."类型错误";
			return false;
		}
	 }
	
	/*
	 * 取得上传文件类型
	 * @access private
	 * @param string $filename 要取得文件类型的文件名
	 * @return string 文件类型
	 * */
	 
	 private function get_file_type($filename)
	 {
	 	$info = pathinfo($filename);
		
		$ext = $info[‘extension‘];
		
		return $ext;
	 }
	 
	 /*
	  *设置上传后的保存路径 
	  * */
	  
	 private function set_save_path()
	 {
	 	$this->save_path = (preg_match(‘/\/$/‘,$this->save_path)) ? $this->save_path : $this->save_path . ‘/‘;
		
		if(!is_dir($this->save_path)){ 
			//如果目录不存在,创建目录 
			$this->set_dir($this->save_path); 
		} 
	 }
	 
	 /*
	  * 创建目录
	  * @access private
	  * @param string $dir 要创建目录的路径
	  * @return boolean 失败的时候返回fales 
	  * */
	  
	 private function set_dir($dir)
	 {
	 	//检查路径是否存在 
		if(is_dir($dir)){ 
			$this->errmsg = ‘需要创建的文件夹已经存在!‘;
		} 
		$dir = explode(‘/‘, $dir);
		$d = "";
		foreach($dir as $v){ 
			if($v){ 
				$d .= $v . ‘/‘; 
				if(!is_dir($d)){ 
					$state = mkdir($d, 0777); 
					if(!$state) 
					$this->errmsg = ‘在创建目录<font color=red>‘ . $d . ‘时出错!‘; 
				} 
			} 
		} 
		return true; 
	}
		
}



/*End of file upload.class.php*/

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。