php上传类的实现代码

<?php
/* 
* [***********************]
* @author: luochen[]
* @Date:   2014-04-23 22:02:45
* @Last Modified time: 2014-04-26 16:29:58
*/
//引入消息类文件
include './Message.class.php';
//引入函数库文件
include "./function.php";
//声明一个上传类并继承Message类的方法
//1.声明类的属性
//2.声明构造函数对类的属性进行初始化
//3.up()函数用来实现上传
//4.move()函数用来实现对文件的移动
//5.filter()函数用来实现对上传文件的筛选
//6.reset_arr()函数用来对上传文件信息数组进行重组
class Upload extends Message{
	//上传路径
	private $path;
	//错误属性
	public $error;
	//上传允许类型
	private $type;
	//上传允许大小
	private $size;

/**
* [__construct 构造函数,初始化配置]
* @param [type] $path [上传路径]
* @param [type] $size [允许大小]
* @param [type] $type [允许类型]
*/
//构造函数用来初始化配置
public function __construct($path = NULL, $size = NULL, $type = NULL){
	//如果上传路径为空则值为默认的
		$this->path = is_null($path) ? './Upload/' : $path;
	//如果上传文件的大小为空则他的值为2000000
		$this->size = is_null($size) ? 2000000 : $size;
	//如果上传文件的类型为空,那么就是数组中的任意一个
		$this->type = is_null($type) ? array('jpg','png','bmp','gif') : $type;

	}

/**
* [up 提供给外部,执行上传]
* @return [type] [description]
*/

//上传方法在单入口文件中被调用,用来实现上传功能
public function up(){
		//返回数组赋值给变量$arr
		$arr = $this->_reset_arr();
		//临时数组,存储上传文件信息
		$temp = array();
		//循环筛选
		foreach ($arr as $v) {
		//如果过滤成功,才进行上传
		if($this->_filter($v)){
				//移动上传
			$temp[] = $this->_move($v);
			}
		}
		//最后返回数组
		return $temp;
}
/**
* [move 移动上传文件]
* @return [type] [description]
*/
//私有方法只能在本类内部被调用
private function _move($v){
		//获取上传文件路径
		$path = $this->path;
		//将路径进行处理,统一路径
		$path = str_replace('\\', '/', $path);
		$path = rtrim($path, '/') . '/';
        //判断目录是不是存在,如果不存在则进行创建
		is_dir($path) || mkdir($path, 0777, true);

		//获得文件信息
		$fileInfo = pathinfo($v['name']);
		//获得类型
		$type = $fileInfo['extension'];

		//重组文件名
		$filename = time() . mt_rand(0,9999) . '.' . $type;

		//判断上传文件是不是可以移动上传文件
		$bool = move_uploaded_file($v['tmp_name'], $path . $filename);

		if($bool){
		//如果是则将新的路径存储到数组$v['save']中
			$v['save'] = $path . $filename;
		}else{
		//如果不是$v['save']的值为null
			$v['save'] = null;
		}
        //最后返回数组
		return $v;
	}
/**
* [_filter 筛选不合格的]
* @return [type] [description]
*/
//私有方法用来筛选不合格的上传文件
private function _filter($v){
		//如果$v['name']不为空,因为有可能图片没有上传,直接使用pathinfo会报错
		if(!empty($v['name'])){
			//获得文件信息
			$fileInfo = pathinfo($v['name']);
			//获得文件的类型
			$type = $fileInfo['extension'];
		}

		switch (TRUE){
			//不是上传文件的判断
			case !is_uploaded_file($v['tmp_name']):
				$this->error = '不是一个上传文件';
				return false;
            //上传文件的类型是不是被允许
			case !in_array($type, $this->type):
				$this->error = '上传类型不允许';
				return false;
            //上传文件的大小有没有超出范围
			case $v['size'] > $this->size:
				$this->error = '上传文件超过网站配置项大小';
				return false;
            //上传文件错误信息的判断
			case $v['error'] == 1:
				$this->error = '大小超过了php.ini中upload_max_filesize 限制值';
				return false;
            //上传文件错误信息的判断
			case $v['error'] == 2:
				$this->error = '大小超过 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
				return false;
            //上传文件错误信息的判断
			case $v['error'] == 3:
				$this->error = '文件只有部分被上传';
				return false;
            //上传文件错误信息的判断
			case $v['error'] == 4:
				$this->error = '没有文件被上传';
				return false;
            //默认返回true
			default:
				return true;
		}

	}

/**
* [_reset_arr 重组数组]
* @return [type] [description]
*/
//私有方法实现对上传文件数组的重组
private function _reset_arr(){
	    //声明一个数组
		$temp = array();
		//循环大数组$_FILES
		foreach ($_FILES as $v) {
			//如果$v['name']为数组,则是多文件上传,否则就是单文件上传,打印$_FILES便知
			if(is_array($v['name'])){
				//如果是一个数组则循环$v['name']
				foreach ($v['name'] as $key => $value) {
					//重新压入数组
					$temp[] = array(
						'name'		=>	$value,
						'type'		=>	$v['type'][$key],
						'tmp_name'	=>	$v['tmp_name'][$key],
						'error'		=>	$v['error'][$key],
						'size'		=>	$v['size'][$key],
						);
				}
			}else{
			//如果$v['name']不是一个数组则将他的值赋给数组$temp
				$temp[] = $v;
			}
			
		}
        //返回处理后的数组
		return $temp;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值