二月飞

学学更健康

自己编写的久经考验的文件上传类,可以直接使用

<?php
defined('ACC')||exit('你没有访问权限');

/*一个上传类需要的知识点
1.判断允许上传的后缀名
2.判断允许上传的最大限制
3.创建目录
4.创建随机文件名
5.上传

*/
class upTool{
    protected $allowExt='jpg,png,jpeg';
    protected $maxSize=1;
    protected $errno = 0; // 错误代码
    protected $error = array(
        0=>'无错',
        1=>'上传文件超出系统限制',
        2=>'上传文件大小超出网页表单页面',
        3=>'文件只有部分被上传',
        4=>'没有文件被上传',
        6=>'找不到临时文件夹',
        7=>'文件写入失败',
        8=>'不允许的文件后缀',
        9=>'文件大小超出的类的允许范围',
        10=>'创建目录失败',
        11=>'移动失败'
            
    );
  
//根据后面的一系列方法开始上传
public function upload($key){
 //1,先判断是否存在上传文件
  if(!isset($_FILES[$key])){
      return false;
    }
//2.如果有的话,接下来判断是否上传成功

 $f=$_FILES[$key];
 if($f['error']){
   $this->errno=$f['error'];
   return false;
   }

//3.判断文件后缀是否是允许的
 $ext=$this->getExt($f['name']);
 if(!$this->isAllowExt($ext)){
   $this->errno=8;
   return false;
   }
//4.判断上传大小
 if(!$this->isAllowSize($f['size'])){
    $this->errno=9;
    return false;
}
//5.判断完毕后,开始创建路径
 if(!($dir=$this->mk_dir())){
 $this->errno=10;
  return false;
  }
$path=$dir.$this->randName().'.'.$ext;

//6.将上传文件移动到制定的路径中
if(!move_uploaded_file($f['tmp_name'],$path)){
$this->errno=11;
return false;
}
return str_replace(ROOT,'',$path);
 }
  
  
  
//获取错误信息
public function getErr(){
return $this->error[$this->errno];
}

//获取上传文件的后缀名
protected function getExt($file){
   $ext=explode('.',$file);
   return end($ext);
  }
  
//判断是否是允许的文件后缀名
protected function isAllowExt($ext){
  $arr=explode(',',strtolower($this->allowExt));
  return in_array(strtolower($ext),$arr);
  
  }

//判断是否是允许上传的大小
  protected function isAllowSize($size){
  
  return $size<=$this->maxSize*1024*1024;
  }

//获取随机的文件名
protected function randName($length=6){
$str='abcdefghigklmnopqrstuvwxyz0123456789';
return substr(str_shuffle($str),0,$length);

}


//创建存贮路径
protected function mk_dir(){
$dir=ROOT.'data/images/'.date('ym/d/',time());
if(is_dir($dir)||mkdir($dir,0777,true)){
return $dir;
}
}

//设置允许的文件后缀
public function setExt($ext){
   return $this->allowExt=$ext;
}
//设置文件上传的最大值
public function setMax($max){
 return $this->maxSize=$max;
}
}
?>

 

这是我自己写的一个文件上传类,先在上传之前写几个上传需要的方法。然后一步一步的调用方法,实现文件上传并且处理的功能。功能强大,步骤清晰,思路严谨。该工具类久经考验,可以直接拿来使用。同时,也可以用来学习用,可以帮助您进一步理解面向对象编程的魅力之所在。接下来我将该工具类分享给大家。
 

posted on 2013-09-15 19:14  二月飞  阅读(194)  评论(0)    收藏  举报

导航