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