매우 고전적 인 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; 
  } 
 } 
?> 
이상 은 본 고의 모든 내용 이 므 로 여러분 이 phop 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기