| 
 | 
 
 
            其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。 
下面的代码放在一个名为UploadFile.class.php文件内 
rand_name = $rand_name; 
      $this->save_path = $save_path; 
      $this->allow_type = $this->get_allow_type($allow_type); 
    } 
     
    /** 
     * 上传文件 
     * 在上传文件前要做的工作 
     * (1) 获取文件所有信息 
     * (2) 判断上传文件是否合法 
     * (3) 设置文件存放路径 
     * (4) 是否重命名 
     * (5) 上传完成 
     * @param array $file 上传文件 
     *     $file须包含$file['name'], $file['size'], $file['error'], $file['tmp_name'] 
     */ 
    public function upload_file($file){ 
      //$this->file   = $file; 
      $this->file_name   = $file['name']; 
      $this->file_size   = $file['size']; 
      $this->error     = $file['error']; 
      $this->file_tmp_name = $file['tmp_name']; 
       
      $this->ext = $this->get_file_type($this->file_name); 
       
      switch($this->error){ 
        case 0: $this->msg = ''; break; 
        case 1: $this->msg = '超出了php.ini中文件大小'; break; 
        case 2: $this->msg = '超出了MAX_FILE_SIZE的文件大小'; break; 
        case 3: $this->msg = '文件被部分上传'; break; 
        case 4: $this->msg = '没有文件上传'; break; 
        case 5: $this->msg = '文件大小为0'; break; 
        default: $this->msg = '上传失败'; break; 
      } 
      if($this->error==0 && is_uploaded_file($this->file_tmp_name)){ 
        //检测文件类型 
        if(in_array($this->ext, $this->allow_type)==false){ 
          $this->msg = '文件类型不正确'; 
          return false; 
        } 
        //检测文件大小 
        if($this->file_size > $this->max_size){ 
          $this->msg = '文件过大'; 
          return false; 
        } 
      } 
      $this->set_file_name(); 
      $this->uploaded = $this->save_path.$this->new_name; 
      if(move_uploaded_file($this->file_tmp_name, $this->uploaded)){ 
        $this->msg = '文件上传成功'; 
        return true; 
      }else{ 
        $this->msg = '文件上传失败'; 
        return false; 
      } 
    } 
     
    /** 
    * 设置上传后的文件名 
    * 当前的毫秒数和原扩展名为新文件名 
    */ 
    public function set_file_name(){ 
      if($this->rand_name==true){ 
        $a = explode(' ', microtime()); 
        $t = $a[1].($a[0]*1000000); 
        $this->new_name = $t.'.'.($this->ext); 
      }else{ 
        $this->new_name = $this->file_name; 
      } 
    } 
     
    /** 
    * 获取上传文件类型 
    * @param string $filename 目标文件 
    * @return string $ext 文件类型 
    */ 
    public function get_file_type($filename){ 
      $ext = pathinfo($filename, PATHINFO_EXTENSION); 
      return $ext; 
    } 
     
    /** 
     * 获取可上传文件的类型 
     */ 
    public function get_allow_type($allow_type){ 
      $s = array(); 
      if(is_array($allow_type)){ 
        foreach($allow_type as $value){ 
          $s[] = $value; 
        } 
      }else{ 
        $s = preg_split("/[\s,|;]+/", $allow_type); 
      } 
      return $s; 
    } 
     
    //获取错误信息 
    public function get_msg(){ 
      return $this->msg; 
    } 
  } 
?> 
其实上面的代码中还有一个可以改进的地方,就是将那些以‘file_'开头的变量缩写为一个$file数组,这样感觉更好一些。 
下面我们来测试一下上面的代码。我在一个名为upfile.php文件写测试代码,同时将UploadFile.class.php放在同一个路径下。 
   
  upfile 
 
   0){ 
        echo "Error: " . $_FILES["file"]["error"] . " 
"; 
      }else{ 
        $file = $_FILES['file']; 
         
        $upload = new UploadFile(true, './images/', array('jpg', 'jpeg', 'png')); 
        $upload->upload_file($file); 
        echo $upload->get_msg(); 
      } 
    }else{ 
  ?> 
   
     
     
     
   
   
 
在上面的代码中,我们可以尝试修改第15行的参数,用来判断一下我们写的方法是否正确。 
这3个参数的含义分别表示:是否使用系统命名、文件存放的路径(相对)、允许上传的文件类型。那么就试试修改这3个参数会发生什么样的变化:(1)把true改为false是否就可以使用它原来的名字了;(2)改下存放路径,看看能不能依然能够上传;(3)试试上传几个不允许的文件,看能不能禁止住,而且关键第三个参数有两种形式,一种是数组,就像示例中一样;还有一种是字符串,用分隔符隔开就行, 'jpg|jpeg|png|gif', 'jpg jpeg png gif', 'jpg,jpeg,png,gif'都行。 
好的,文件上传类就这样写好了。 
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 
             
             
您可能感兴趣的文章:PHP5+UTF8多文件上传类php 文件上传类代码一个经典的PHP文件上传类分享php可生成缩略图的文件上传类实例php判断文件上传类型及过滤不安全数据的方法PHP多文件上传类实例PHP文件上传类实例详解非常经典的PHP文件上传类分享功能强大的php文件上传类php文件上传类的分享 
         |   
 
 
 
 |