| 
 | 
 
 
            本文实例为大家分享了php文件上传类的具体代码,供大家参考,具体内容如下 
uploadFile('fm'); 
/*打印错误信息*/ 
// var_dump($upload->errorNumber); 
// var_dump($upload->errorInfo); 
class UpLoad{ 
  //文件上传路径 
  protected $path = 'upload/'; 
  //允许文件上传的后缀 
  protected $allowSuffix = ['jpg','jpeg', 
  'gif','wbmp','png']; 
  //mime类型  
  protected $allowMime =['image/jpg','image/jpeg', 
  'image/gif','image/wbmp','image/png']; 
  //允许上传的大小 
  protected $maxSize = 2000000; 
  //是否启用默认的前缀 
  protected $isRandName =true ; 
  //文件的前缀 
  protected $prefix = 'up_'; 
  //错误号和错误信息 
  protected $errorNumber; 
  protected $errorInfo; 
  //文件的信息 
  //文件名 
  protected $oldName; 
  //文件的后缀 
  protected $suffix; 
  //文件的大小 
  protected $size; 
  //文件的mime 
  protected $mime; 
  //文件的临时文件的路径 
  protected $tmpName; 
  //文件新名字 
  protected $newName; 
   
  //构造方法 
  //因为成员属性比较多就用数组来显示 
  public function __construct($arr =[]){ 
    foreach ($arr as $key=>$value){ 
      $this->setOption($key,$value); 
    } 
  } 
  //判断$key是不是我的成员属性,如果是就设置 
  protected function setOption($key,$value){ 
    //得到所有的成员属性 
    $keys = array_keys(get_class_vars(__CLASS__)); 
    if(in_array($key, $keys)){ 
      $this->$key = $value; 
    } 
  } 
  //文件上传函数 
  //key 就是input框中的name属性值 
  public function uploadFile($key){ 
    //判断有没有设置路径 path 
    if(empty($this->path)){ 
      $this->setOption('errorNumber',-1 ); 
      return false; 
    } 
    //判断该路径是否存在是否可写 
    if (!$this->check()){ 
      $this->setOption('errorNumber', -2); 
      return false;  
    } 
    //判断$_FILES里面的error信息是否为0,如果为0则说明文件信息在服务器端可以直接获取,提取信息保存到成员属性中 
    $error = $_FILES[$key]['error']; 
    if($error){ 
      $this->setOption('errorNumber', -3); 
      return false; 
    }else { 
      //提取文件相关信息并且保存到成员属性中 
      $this->getFileInfo($key); 
    } 
    //判断文件的大小、mime、后缀是否符合 
     if(!$this->checkSize() || !$this->checkMime()|| !$this->checkSuffix()){ 
       return false; 
     } 
    //得到新的文件名字 
    $this->newName = $this->createNewName(); 
    //判断是否是上传文件,并且是移动上传文件 
    if(is_uploaded_file($this->tmpName)){ 
      if(move_uploaded_file($this->tmpName, $this->path.$this->newName)){ 
        return $this->path.$this->newName; 
      }else { 
        $this->setOption('errorNumber', -7); 
        return false; 
      } 
    }else{ 
      $this->setOption('errorNumber', -6); 
      return false; 
    } 
  } 
  //检测文件夹是否存在,是否可写 
  protected function check(){ 
    //文件夹不存在或者不是目录。创建文件夹 
    if(!file_exists($this->path) ||!is_dir($this->path)){ 
      return mkdir($this->path,0777,true); 
    } 
    //判断文件是否可写 
    if(!is_writeable($this->path)){ 
      return chmod($this->path, 0777); 
    } 
    return true; 
  } 
  //根据key得到文件信息 
  protected function getFileInfo($key){ 
    //得到文件的名字 
    $this->oldName = $_FILES[$key]['name']; 
    //得到文件的mime类型 
    $this->mime = $_FILES[$key]['type']; 
    //得到文件的临时文件 
    $this->tmpName = $_FILES[$key]['tmp_name']; 
    //得到文件大小 
    $this->size = $_FILES[$key]['size']; 
    //得到文件后缀 
    $this->suffix = pathinfo($this->oldName)['extension']; 
  } 
  //判断文件大小 
  protected function checkSize(){ 
    if($this->size > $this->maxSize){ 
      $this->setOption('errorNumber', -3); 
      return false; 
    } 
    return true; 
  } 
  //判断mime类型 
  protected function checkMime(){ 
    if(!in_array($this->mime, $this->allowMime)){ 
      $this->setOption('errorNumber', -4); 
      return false; 
    } 
    return true; 
  } 
  //判断后缀 
  protected function checkSuffix(){ 
    if(!in_array($this->suffix, $this->allowSuffix)){ 
      $this->setOption('errorNumber', -5); 
      return false; 
    } 
    return true; 
  } 
  //创建新名字 
  protected function createNewName(){ 
    if($this->isRandName){ 
      $name = $this->prefix.uniqid().'.'.$this->suffix; 
    }else { 
      $name = $this->prefix.$this->oldName; 
    } 
    return $name; 
  } 
  public function __get($name){ 
    if($name == 'errorNumber'){ 
      return $this->errorNumber; 
    }elseif ($name == 'errorInfo'){ 
      return $this->getErrorInfo(); 
    } 
  } 
  protected function getErrorInfo(){ 
    switch ($this->errorNumber){ 
    case -1: 
      $str = '文件路径没有设置'; 
      break; 
    case -2: 
      $str = '文件不是目录或者不可写'; 
      break; 
    case -3: 
      $str = '文件超过指定大小'; 
      break; 
    case -4: 
      $str = 'mime类型不符合'; 
      break; 
    case -5: 
      $str = '文件后缀不符合'; 
      break; 
    case -6: 
      $str = '不是上传文件'; 
      break; 
    case -7: 
      $str = '移动失败'; 
      break; 
    case 1: 
      $str = '超出ini设置大小'; 
      break; 
    case 2: 
      $str = '超出html表单大小'; 
      break; 
    case 3: 
      $str = '文章只有部分上传'; 
      break; 
    case 4: 
      $str = '没有文件上传'; 
      break; 
    case 6: 
      $str = '找不到临时文件'; 
      break; 
    case 7: 
      $str = '文件写入失败'; 
      break; 
    } 
    return $str; 
  } 
} 
   
  文件上传 
 
    
   
  
 
注意:input中的name必须和上传类中的uploadFile中是传值一致! 
更多精彩内容请参考php文件上传操作汇总进行学习。 
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 
             
             
您可能感兴趣的文章:PHP5+UTF8多文件上传类php 文件上传类代码一个经典的PHP文件上传类分享php可生成缩略图的文件上传类实例php判断文件上传类型及过滤不安全数据的方法PHP多文件上传类实例PHP文件上传类实例详解非常经典的PHP文件上传类分享功能强大的php文件上传类一个非常实用的php文件上传类 
         |   
 
 
 
 |