PHP 文件上传类 FileUpload 高洛峰老师 细说PHP
生活随笔
收集整理的這篇文章主要介紹了
PHP 文件上传类 FileUpload 高洛峰老师 细说PHP
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/**文件名為FileUpload.class.php*將與文件上傳相關(guān)的成員屬性和成員方法聲明在一起*/class?FileUpload{private?$filePath;??????????????????????????????????//保存上傳文件將被保存的目的路徑private?$fileField;?????????????????????????????????//保存從$_FILES[$fileField]中獲取上傳文件信息private?$originName;???????????????????????????//保存上傳文件的源文件明年private?$tmpFileName;???????????????????????//保存上傳文件的臨時(shí)文件名private?$fileType;????????????????????????????????//保存上傳文件的類型private?$fileSize;??????????????????????????????????//保存上傳文件的大小private?$newFileName;???????????????????????//保存上傳文件的新文件名//用于保存上傳文件允許的文件類型(保存文件后綴名數(shù)組)private?$allowType?=?array('txt','html','php','js','css','jpg','gif','png','doc','swf','rar','zip');private?$maxSize?=?1000000000;??????????//允許文件上傳的最大長度,默認(rèn)為1MBprivate?$isUserDefName?=?false;??????????//文件上傳后,是否采用用戶自定文件名private?$userDefName;?????????????????????????//保存用戶自定義的上傳文件mingcprivate?$isRandName?=?false;??????????????//上傳文件是否使用隨機(jī)文件名稱private?$randName;?????????????????????????????//保存系統(tǒng)隨機(jī)命名的上傳文件名稱private?$errorNum?=?0;????????????????????????//保存系統(tǒng)自定義的錯(cuò)誤號,默認(rèn)值為0private?$isCoverModer?=?true;????????????//上傳文件是否覆蓋原有的文件,默認(rèn)值為TRUE/**?構(gòu)造方法,創(chuàng)建上傳文件對象時(shí)為部分成員屬性列表賦初值*?參數(shù)options:提供一個(gè)數(shù)組,數(shù)組下標(biāo)為成員屬性名稱,元素值為屬性設(shè)置的值*/function?__construct($options=array()){$this->setOptions($options);????????????????????//調(diào)用內(nèi)容方法為上傳文件的屬性列表賦值}/**?在對象外部調(diào)用該法處理上傳文件*?參數(shù)filefield提供全局變量數(shù)組$_FILES是的第二維數(shù)組*?返回值?如果文件上傳成功返回TRUE,如果失敗則返回FALSE*/function?uploadFile($filefield){$this->setOption('errorNum',0);????????????????????//為錯(cuò)誤位設(shè)置初值$this->setOption('fileField',$filefield);??????????//通過參數(shù)設(shè)置成員屬性fileField的值$this->setFiles();?????????????????????????????????????????????//調(diào)用成員方法設(shè)置文件信息$this->checkValid();????????????????????????????????????????//判斷上傳文件是否有效$this->checkFilePath();???????????????????????????????????//檢查保存上傳文件的路徑是否正確$this->setNewFileName();??????????????????????????????//將上傳文件設(shè)置為新文件名if($this->errorNum?<0)???????????????????????????????????//檢查上傳文件是否出錯(cuò)return?$this->errorNum;????????????????????????????//如果出錯(cuò)退出函數(shù)并返回錯(cuò)誤號?return?$this->copyFile();?????????????????????????????????//將上傳文件移動到指定位置??}/**?為成員屬性列表賦初值*??參數(shù)options:提供一個(gè)數(shù)組,數(shù)組下標(biāo)為成員屬性名稱,元素值為屬性設(shè)置的值*/private?function?setOptions($options?=?array()){foreach($options?as?$key?=>?$val){//遍歷參數(shù)數(shù)組//檢查數(shù)組的下標(biāo)是否和成員屬性同名if(!in_array($key,?array('filePath','fileField','originName','allowType','maxSize','isUserDefName','userDefName','isRandName','randName'))){continue;//如果數(shù)組中沒有正確的下標(biāo)則退出循環(huán)}$this->setOption($key,$val);//將數(shù)組中的值賦給對應(yīng)數(shù)組下標(biāo)的成員屬性}}/**?從$_FILES數(shù)組中取值,賦給對應(yīng)的成員屬性*/private?function?setFiles(){if($this->getFileErrorFromFILES()!=0){//檢查上傳文件是否出現(xiàn)錯(cuò)誤$this->setOption('errorNum',-1);//如果有錯(cuò)誤則設(shè)置錯(cuò)誤標(biāo)號為-1return?$this->errorNum;????????????????//退出函數(shù)不向下執(zhí)行}//調(diào)用對象內(nèi)部函數(shù)為保存上傳文件源名的成員屬性賦值$this->setOption('originName',$this->getFileNameFromFILES());//保存上傳文件臨時(shí)文件名的成員屬性賦值$this->setOption('tmpFileName',$this->getTmpFileNameFromFILES());//類型$this->setOption('fileType',$this->getFileTypeFromFILES());//大小$this->setOption('fileSize',$this->getFileSizeFromFILES());????????????????}/**為指定的成員屬性賦值*參數(shù)key:提供保存成員屬性名的變量*參數(shù)val:提供將要為成員屬性賦的值*/private?function?setOpiton($key,$val){$this->$key?=?$val;?//為成員屬性賦值}/**?為上傳文件設(shè)置新的文件名稱*/private?function?setNewFileName(){//如果不允許隨機(jī)文件名并且不允許用戶自定義文件名,則新文件件名為上傳文件源名if($this->isRandName==false?&&?$this->isUserDefName==false){$this->setOption('newFileName',?$this->originName);}elseif($this->isRandName==ture?&&?$this->isUserDefName==false){$this->setOption('newFileName',$this->proRandName().'.'.$this->fileType);}elseif($this->isRandName==false?&&?$this->isUserDefName==true){$this->setOption('newFileName',$this->userDefName);}else{$this->setOption('errorNum',-4);//以上條件都不成立?設(shè)置錯(cuò)誤為-4}}/**?檢查上傳是否有效*/private?function?checkValid(){$this->checkFileSize();//檢查上傳文件大小是否超出范圍$this->checkFileType();//檢查上傳文件類型是否為允許的類型}/**?檢查上傳文件類型是否為允許的類型*/private?function?checkFileType(){if(!in_array($this->fileType,?$this->allowType)){$this->setOption('errorNum',-2);return?$this->errorNum;}}/**?檢查上傳文件大小是否超出范圍*/private?function?checkFileSize(){if($this->fileSize?>?$this->maxSize){$this->setOption('errorNum',-3);return?$this->errorNum;}}/**?檢查保存上傳文件的路徑是否有效*/private?function?checkFilePath(){if(!file_exists($this->filePath)){if($this->isCoverModer){$this->makePath();}else{$this->setOption('errorNum',-6);}}}/**?隨機(jī)產(chǎn)生上傳文件的新文件名稱*/private?function??proRandName(){$tmpStr?=?'abcdefghijklmnopqrstuvwxyz0123456789';$str?=?"";$len?=strlen($tmpStr);for($i=0;$i<8;$i++){$num?=?rand(0,$len);$str?.=$tmpStr[$num];????????????????????}return?$str;}/**?創(chuàng)建保存上傳文件的路徑*/private?function?makePath(){if(!@mkdir($this->filePath,0755)){$this->setOption('errorNum',-7);}}/**?將上傳文件從臨時(shí)目錄中復(fù)制到指定的新位置*/private?function?copyFile(){$filePath?=?$this->filePath;if($filePath[strlen($filePath)-1]?!=?'/'){$filePath?.='/';}$filePath?.=?$this->newFileName;if(!@move_uploaded_file($this->tmpFileName,?$filePath)){$this->setOption('errorNum',-5);}return?$this->errorNum;????????????????}/**?從全局變量數(shù)組$_FILES中獲取上傳文件的錯(cuò)誤標(biāo)號*/private?function?getFileErrorFromFILES(){return?$this->filedField['error'];}/**?獲取文件的后綴名*/private?function?getFileTypeFromFILES(){$str?=$this->fileField['name'];$aryStr?=?split("./",?$str);$ret?=?strtolower($aryStr[count($aryStr)-1]);return?$ret;}/**?從全局變量數(shù)組$_FILES中獲取上傳文件的名稱*/private??function?getFileNameFromFILES(){return?$this->fileField['name'];}/**?獲取臨時(shí)文件名稱*/private??function?getTmpFileNameFromFILES(){return?$this->fileField['tmp_name'];}/**獲取文件大小*/private?function?getFileSizeFromFILES(){return?$this->fileField['size'];}/**?根據(jù)錯(cuò)誤標(biāo)號返回對應(yīng)的錯(cuò)誤信息*/public?function?getErrorMsg(){$str?="上傳文件出錯(cuò):";switch?($this->errorNum){case?-1:$str?.=?"未知錯(cuò)誤";break;case?-2:$str?.=?"未允許類型";break;???????????case?-3:$str?.=?"文件過大";break;case?-4:$str?.=?"產(chǎn)生文件名出錯(cuò)";break;case?-5:$str?.=?"上傳失敗";break;case?-6:$str?.=?"目錄不存在";break;case?-7:$str?.=?"建立目錄失敗";break;}return?$str;}?????????????????}
轉(zhuǎn)載于:https://blog.51cto.com/11410485/1841758
總結(jié)
以上是生活随笔為你收集整理的PHP 文件上传类 FileUpload 高洛峰老师 细说PHP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fastreport.Net用户手册:报
- 下一篇: corosync+pacemaker在c