這篇文章主要為大家分享了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中是傳值一致!