| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | 
							- <?php
 
- namespace KIF;
 
- /**
 
-  * @name 单文件上传类
 
-  * @desc 本控件主要对文件上传过程的监控,需要时可自动创建目标目录的上层目录。文件保存的路径和命名规则不在控件内设置。
 
-  * @author lishuming@kimiss.com
 
-  * 使用方法
 
-  * $objUpload = new \KIF\Upload($custom_config);
 
-  * $objUpload->execute();
 
-  * 
 
-  * @param array 自定义配置参数
 
-  * $custom_config = array(
 
-  * 		'save_path'	=> '/tmp/dir/', (必填)文件保存路径
 
-  * 		'save_filename'	=> 'name', (选填)保存文件名。不需要添加文件后缀。留空时使用原名
 
-  * 		'file_type'	=> '', (必填)上传文件类型
 
-  * 		'field'	=> 'myFile', (必填)客户端文件上传控件名,input 中的表单名
 
-  * 		...
 
-  * );
 
-  */
 
- use KIF\Data\ResultWrapper;
 
- class Upload {
 
- 	
 
- 	/**
 
- 	 * 上传文件控件配置
 
- 	 * @var array
 
- 	 */
 
- 	private $config = array();
 
- 	
 
- 	/**
 
- 	 * 上传文件控件默认配置
 
- 	 * @var array
 
- 	 */
 
- 	private $default_config = array(
 
- 		'save_path'		=> '',		//文件保存目录路径。格式:/tmp/dir/
 
- 		'save_filename'	=> null,		//保存文件名。默认为空时使用原名
 
- 		'file_type'		=> '', //上传文件的类型。可选项有:image,flash,media,file
 
- 		'allow_ext_arr'	=> array(	//定义允许上传文件的扩展名
 
- 			'image'		=> array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
 
- 			'flash'		=> array('swf', 'flv'),
 
- 			'media'		=> array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
 
- 			'file'		=> array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
 
- 		),
 
- 		'max_size'		=> 1000000,	//允许上传最大文件的大小 (单位字节)
 
- 		'field'			=> '',		//客户端文件上传控件名,input 中的表单名
 
- 		'dchmod'		=> 0777,	//新创建的目录权限设置
 
- 		'fchmod'		=> 0777,	//新创建的文件权限设置
 
- 	);
 
- 	
 
- 	public function __construct(/*自定义配置*/$custom_config = array()) {
 
- 		if (!empty($custom_config)) {
 
- 			$this->config = array_merge($this->default_config, $custom_config);
 
- 		} else {
 
- 			$this->config = $this->default_config;
 
- 		}
 
- 	}
 
- 	
 
- 	public function execute() {
 
- 		if (!$this->config['save_path']) {
 
- 			return ResultWrapper::fail('请设置文件保存路径。');
 
- 		}
 
- 		$save_path = rtrim($this->config['save_path'], DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
 
- 		
 
- 		if (!$this->config['file_type']) {
 
- 			return ResultWrapper::fail('请设置上传文件类型。');
 
- 		}
 
- 		$file_type = $this->config['file_type'];
 
- 		
 
- 		if (!$this->config['field']) {
 
- 			return ResultWrapper::fail('请设置客户端文件上传控件名。');
 
- 		}
 
- 		$field = $this->config['field'];
 
- 		
 
- 		$ext_arr = $this->config['allow_ext_arr'];
 
- 		
 
- 		$max_size = $this->config['max_size'];
 
- 		
 
- 		if (empty($_FILES)) {
 
- 			return ResultWrapper::fail('没有需要上传的文件。');
 
- 		}
 
- 		
 
- 		#保存文件名
 
- 		if (!$this->config['save_filename']) {
 
- 			$save_filename = $_FILES[$field]['name'];
 
- 		}
 
- 		$save_filename = $this->config['save_filename'];
 
- 		
 
- 		#原文件名
 
- 		$file_name = $_FILES[$field]['name'];
 
- 		
 
- 		#检查文件名
 
- 		if (!$file_name) {
 
- 			return ResultWrapper::fail('请选择上传文件。');
 
- 		}
 
- 		
 
- 		#服务器上临时文件名
 
- 		$tmp_name = $_FILES[$field]['tmp_name'];
 
- 		
 
- 		#文件大小
 
- 		$file_size = $_FILES[$field]['size'];
 
- 		
 
- 		#检查是否已上传
 
- 		if (@is_uploaded_file($tmp_name) === false) {
 
- 			return ResultWrapper::fail("临时文件可能不是上传文件。");
 
- 		}
 
- 		
 
- 		#检查文件大小
 
- 		if ($file_size > $max_size) {
 
- 			return ResultWrapper::fail("上传文件大小超过限制。");
 
- 		}
 
- 		
 
- 		#获得文件扩展名
 
- 		$file_ext = $this->getExtension($file_name);
 
- 		#检查扩展名
 
- 		if (in_array($file_ext, $ext_arr[$file_type]) === false) {
 
- 			return ResultWrapper::fail("上传文件扩展名是不允许的扩展名。");
 
- 		}
 
- 		
 
- 		#检查目录
 
- 		if (@is_dir($save_path) === false) {
 
- 			#创建目录
 
- 			if (!mkdir($save_path, intval($this->config['dchmod']), true)) {
 
- 				return ResultWrapper::fail("创建目录失败:{$save_path}");
 
- 			}
 
- 		}
 
- 		
 
- 		#检查目录写权限
 
- 		if (@is_writable($save_path) === false) {
 
- 			return ResultWrapper::fail("上传目录没有写权限。");
 
- 		}
 
- 		
 
- 		#移动文件
 
- 		$file_path = $save_path . $save_filename . '.' . $file_ext;
 
- 		if (move_uploaded_file($tmp_name, $file_path) === false) {
 
- 			return ResultWrapper::fail("上传文件失败。");
 
- 		}
 
- 		
 
- 		@chmod($file_path, intval($this->config['fchmod']));
 
- 		
 
- 		return ResultWrapper::success(array(
 
- 			'file_path'	=> $file_path,
 
- 		));
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 获取文件扩展名
 
- 	 * @param string $filename
 
- 	 * @return string
 
- 	 */
 
- 	static public function getExtension($filename) {
 
- 		$temp_arr = explode(".", $filename);
 
- 		$file_ext = array_pop($temp_arr);
 
- 		$file_ext = trim($file_ext);
 
- 		return strtolower($file_ext);
 
- 	}
 
- 	
 
- }
 
 
  |