php檔案上傳類的分享_php執行個體

來源:互聯網
上載者:User
這篇文章主要為大家分享了php檔案上傳類的相關代碼,具有一定的參考價值,感興趣的小夥伴們可以參考一下

代碼如下:

<?php$upload = new UpLoad();$upload->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;  }}

<!doctype html><html lang="en"><head>  <meta charset="UTF-8" />  <title>檔案上傳</title></head><body><form action="UpLoad.php" method="post" enctype="multipart/form-data" >   <input type="file" name="fm" value=""><br>  <input type="submit" value="上傳檔案" /><br> </form></body></html>

注意:input中的name必須和上傳類中的uploadFile中是傳值一致!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.