栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

一个非常实用的php文件上传类

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一个非常实用的php文件上传类

其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。

下面的代码放在一个名为UploadFile.class.php文件内

rand_name = $rand_name;
      $this->save_path = $save_path;
      $this->allow_type = $this->get_allow_type($allow_type);
    }
    
    
    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;
      }
    }
    
    
    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'都行。

好的,文件上传类就这样写好了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/40743.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号