首页 > 语言 > PHP > 正文

非常经典的PHP文件上传类分享

2024-05-04 23:46:01
字体:
来源:转载
供稿:网友
这篇文章主要为大家详细介绍了一个经典的PHP文件上传类,降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中,本文为大家分享了PHP文件上传类,需要的朋友可以参考下
 

文件上传是项目开发中比较常见的功能,但文件上传的过程比较繁琐,只要是有文件上传的地方就需要编写这些复杂的代码。为了能在每次开发中降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中。

<?php /**  +-----------------------------------------------------------------------------  * 文件上传类  +-----------------------------------------------------------------------------  * @author Administrator  +-----------------------------------------------------------------------------  */  class FileUpload{      private $filepath;  //保存路径   private $allowtype=array('gif','jpg','jpeg','png','txt');   private $maxsize=1000000;  //最大允许上传大小   private $israndname=true; //是否随机   private $orginame; //原始文件名   private $tmpname;  //临时文件名   private $newname;  //新文件名   private $filetype; //文件类型    private $filesize; //文件大小   private $errornum=''; //错误号   private $errormsg; //错误信息 /**  +------------------------------------------------------------------------------  *构造函数  +------------------------------------------------------------------------------  * @param string $savepath  保存路径  * @param string $allowtype 允许类型  * @param string $maxsize  允许大小  *  +------------------------------------------------------------------------------  */      function __construct($option=array()){      foreach ($option as $key=>$value){               if (!in_array($key,get_class_vars(get_class($this)))){         continue;        }       $this->setOption($key, $value);       }   }   function uploadfile($field) {      $return=true;     if (!$this->CheckPath()) {       $this->errormsg=$this->geterrorNum();       return false;     }     $name=$_FILES[$field]['name'];     $tmpname=$_FILES[$field]['tmp_name'];     $filesize=$_FILES[$field]['size'];     $error=$_FILES[$field]['error'];       if (is_array($name)) {       $errors=array();        for ($i=0;$i<count($name);$i++){         if ($this->getFile($name[$i],$tmpname[$i],$filesize[$i],$errors[$i])) {           if (!$this->CheckSize() && !$this->CheckType()) {             $errors=$this->getErrorNum();             return false;             }                                         }else{             $errors=$this->getErrorNum();             return false;         }         if (!$return) {           $this->getFile();         }        }        if ($return) {         $fileNames=array();         for ($i=0;$i<count($name);$i++){           if ($this->getFile($name[$i], $tmpname[$i], $filesize[$i], $filesize[$i])) {             $this->SetFileName();             if (!$this->MoveFile()) {               $errors[]=$this->getErrorNum();               $return=false;             }else{               $fileNames[]=$this->getNewName();             }           }                 }         $this->newname=$fileNames;        }         $this->errormsg=$errors;         return $return;              }else{        if($this->getFile($name,$tmpname,filesize,$error)){         if(!$this->CheckSize()){           return false;         }         if(!$this->CheckType()){           return false;         }          $this->SetFileName();         if ($this->MoveFile()) {             return true;         }        }else{       return false;       }               if (!$return) {       $this->setOption('ErrorNum', 0);       $this->errormsg=$this->geterrorNum();       }      return $return;     }   }   /**    +------------------------------------------------------------------------    *设置类属性值函数    +------------------------------------------------------------------------    * @param mix $key    * @param mix $value    */   private function setOption($key,$value){     $key=strtolower($key);     $this->$key=$value;   }   /**    +---------------------------------------------------------------------------    * 获取文件变量参数函数    +---------------------------------------------------------------------------    * @param string $name    * @param string $tmp_name    * @param number $size    * @param number $error    */   private function getFile($name,$tmpname,$filetype,$filesize,$error=0){           $this->setOption('TmpName', $tmpname);     $this->setOption('OrgiName', $name);     $arrstr=explode('.', $name);     $this->setOption('FileType', $arrstr[count($arrstr)-1]);          $this->setOption('FileSize', $filesize);     return true;   }   /**    +-------------------------------------------------------------------------    * 检查上传路径函数    +-------------------------------------------------------------------------    * @return boolean    */   private function CheckPath(){     if(empty($this->filepath)){       $this->setOption('ErrorNum', -5);       return false;     }     if (!file_exists($this->filepath)||!is_writable($this->filepath)) {        if (!@mkdir($this->filepath,0755)) {          $this->setOption('ErrorNum',-4);          return false;        }     }     return true;   }   private function Is_Http_Post(){     if (!is_uploaded_file($this->tmpname)) {       $this->setOption('ErrorNum',-6);        return false;     }else{       return true;     }   }   /**    +--------------------------------------------------------------------    *检查文件尺寸函数    +--------------------------------------------------------------------    * @return boolean    */   private function CheckSize(){     if ($this->filesize>$this->maxsize) {       $this->setOption('ErrorNum', -2);       return false;     }else{       return true;     }   }   /**    +---------------------------------------------------------------    * 检查文件类型函数    +---------------------------------------------------------------    * @return boolean    */   private function CheckType(){     if (in_array($this->filetype, $this->allowtype)) {       return true;     }else{       $this->setOption('ErrorNum', -1);       return false;     }   }   private function SetFileName(){     if ($this->israndname) {       $this->setOption('NewName', $this->RandName());     }else{       $this->setOption('NewName',$this->orginame);     }    }   /**    +-----------------------------------------------------------------    * 获取新文件名    +------------------------------------------------------------------    */   public function getNewName() {     return $this->newname;   }   private function RandName(){     $rule=date("YmdHis").rand(0, 999);     return $rule.'.'.$this->filetype;   }   private function MoveFile(){     if ($this->errornum) {       $filepath=rtrim($this->filaepath,'/').'/';       $filepath.=$this->newname;       if (@move_uploaded_file($this->tmpname,$filepath)) {         return true;        }else{         $this->errormsg=$this->setOption('ErrorNum',-3 );        }     }else{       return false;     }   }   /**    +----------------------------------------------------------------    * 错误信息函数    +----------------------------------------------------------------    * @return string    */    function getErrorNum() {     $erstr="上传文件<font color='red'>{$this->orginame}</font>出错";     switch ($this->errornum) {       case 4:        $erstr.="没有文件被上传";         break;       case 3:        $erstr.="文件只被部分上传";         break;       case 2:        $erstr.="上传文件超过了HTML表单MAX_FILE_SIZE指定的值";         break;       case 1:        $erstr.="上传文件超过了php.ini配置文件中upload_max_filesize的值";         break;       case 0:        $erstr="上传{$this->orginame}成功";         break;              case -1:        $erstr="未允许的类型";         break;       case -2:        $erstr.="文件过大,不能超过{$this->maxsize}个字节";          break;       case -3:        $erstr.="上传失败";         break;       case -4:        $erstr="创建上传目录失败,请重新指定上传目录";         break;       case -5:        $erstr="未指定上传路径";         break;       case -6:        $erstr="非法操作";         break;                          default:        $erstr.="未知错误";              }     return $erstr;   }  } ?> 

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。



注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选