課程
/后端開發(fā)
/PHP
/Discuz!X二次開發(fā)——前臺篇
哪位小伙伴有老師視頻中講到的class_upload.php上傳文件的那個類庫???
2017-08-24
源自:Discuz!X二次開發(fā)——前臺篇 6-2
正在回答
git.oschina.com去下載啊
<?php ??/**? ??*??file:?fileupload.class.php?文件上傳類FileUpload ??*??本類的實(shí)例對象用于處理上傳文件,可以上傳一個文件,也可同時處理多個文件上傳 ??*/ ??class?FileUpload?{? ????private?$path?=?"";??????????//上傳文件保存的路徑 ????private?$allowtype?=?array('jpg','gif','png');?//設(shè)置限制上傳文件的類型 ????private?$maxsize?=?1000000;???????????//限制文件上傳大小(字節(jié)) ????private?$israndname?=?true;???????????//設(shè)置是否隨機(jī)重命名文件,?false不隨機(jī) ?? ????private?$originName;??????????????//源文件名 ????private?$tmpFileName;??????????????//臨時文件名 ????private?$fileType;???????????????//文件類型(文件后綴) ????private?$fileSize;???????????????//文件大小 ????private?$newFileName;??????????????//新文件名 ????private?$errorNum?=?0;?????????????//錯誤號 ????private?$errorMess="";?????????????//錯誤報告消息 ?? ????/** ?????*?用于設(shè)置成員屬性($path,?$allowtype,$maxsize,?$israndname) ?????*?可以通過連貫操作一次設(shè)置多個屬性值 ?????*@param??string?$key??成員屬性名(不區(qū)分大小寫) ?????*@param??mixed??$val??為成員屬性設(shè)置的值 ?????*@return??object?????返回自己對象$this,可以用于連貫操作 ?????*/ ????function?set($key,?$val){ ??????$key?=?strtolower($key);? ??????if(?array_key_exists(?$key,?get_class_vars(get_class($this)?)?)?){ ????????$this->setOption($key,?$val); ??????} ??????return?$this; ????} ?? ????/** ?????*?調(diào)用該方法上傳文件 ?????*?@param??string?$fileFile??上傳文件的表單名稱? ?????*?@return?bool????????如果上傳成功返回數(shù)true? ?????*/ ?? ????function?upload($fileField)?{ ??????$return?=?true; ??????/*?檢查文件路徑是滯合法?*/ ??????if(?!$this->checkFilePath()?)?{??????? ????????$this->errorMess?=?$this->getError(); ????????return?false; ??????} ??????/*?將文件上傳的信息取出賦給變量?*/ ??????$name?=?$_FILES[$fileField]['name']; ??????$tmp_name?=?$_FILES[$fileField]['tmp_name']; ??????$size?=?$_FILES[$fileField]['size']; ??????$error?=?$_FILES[$fileField]['error']; ?? ??????/*?如果是多個文件上傳則$file["name"]會是一個數(shù)組?*/ ??????if(is_Array($name)){???? ????????$errors=array(); ????????/*多個文件上傳則循環(huán)處理?,?這個循環(huán)只有檢查上傳文件的作用,并沒有真正上傳?*/ ????????for($i?=?0;?$i?<?count($name);?$i++){? ??????????/*設(shè)置文件信息?*/ ??????????if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i]?))?{ ????????????if(!$this->checkFileSize()?||?!$this->checkFileType()){ ??????????????$errors[]?=?$this->getError(); ??????????????$return=false;? ????????????} ??????????}else{ ????????????$errors[]?=?$this->getError(); ????????????$return=false; ??????????} ??????????/*?如果有問題,則重新初使化屬性?*/ ??????????if(!$return)?????????? ????????????$this->setFiles(); ????????} ?? ????????if($return){ ??????????/*?存放所有上傳后文件名的變量數(shù)組?*/ ??????????$fileNames?=?array();?????? ??????????/*?如果上傳的多個文件都是合法的,則通過銷魂循環(huán)向服務(wù)器上傳文件?*/ ??????????for($i?=?0;?$i?<?count($name);?$i++){? ????????????if($this->setFiles($name[$i],?$tmp_name[$i],?$size[$i],?$error[$i]?))?{ ??????????????$this->setNewFileName();? ??????????????if(!$this->copyFile()){ ????????????????$errors[]?=?$this->getError(); ????????????????$return?=?false; ??????????????} ??????????????$fileNames[]?=?$this->newFileName;?? ????????????}?????????? ??????????} ??????????$this->newFileName?=?$fileNames; ????????} ????????$this->errorMess?=?$errors; ????????return?$return; ??????/*上傳單個文件處理方法*/ ??????}?else?{ ????????/*?設(shè)置文件信息?*/ ????????if($this->setFiles($name,$tmp_name,$size,$error))?{ ??????????/*?上傳之前先檢查一下大小和類型?*/ ??????????if($this->checkFileSize()?&&?$this->checkFileType()){? ????????????/*?為上傳文件設(shè)置新文件名?*/ ????????????$this->setNewFileName();? ????????????/*?上傳文件??返回0為成功,?小于0都為錯誤?*/ ????????????if($this->copyFile()){? ??????????????return?true; ????????????}else{ ??????????????$return=false; ????????????} ??????????}else{ ????????????$return=false; ??????????} ????????}?else?{ ??????????$return=false;? ????????} ????????//如果$return為false,?則出錯,將錯誤信息保存在屬性errorMess中 ????????if(!$return) ??????????$this->errorMess=$this->getError();?? ?? ????????return?$return; ??????} ????} ?? ????/**? ?????*?獲取上傳后的文件名稱 ?????*?@param??void???沒有參數(shù) ?????*?@return?string?上傳后,新文件的名稱,?如果是多文件上傳返回數(shù)組 ?????*/ ????public?function?getFileName(){ ??????return?$this->newFileName; ????} ?? ????/** ?????*?上傳失敗后,調(diào)用該方法則返回,上傳出錯信息 ?????*?@param??void???沒有參數(shù) ?????*?@return?string??返回上傳文件出錯的信息報告,如果是多文件上傳返回數(shù)組 ?????*/ ????public?function?getErrorMsg(){ ??????return?$this->errorMess; ????} ?? ????/*?設(shè)置上傳出錯信息?*/ ????private?function?getError()?{ ??????$str?=?"上傳文件<font?color='red'>{$this->originName}</font>時出錯?:?"; ??????switch?($this->errorNum)?{ ????????case?4:?$str?.=?"沒有文件被上傳";?break; ????????case?3:?$str?.=?"文件只有部分被上傳";?break; ????????case?2:?$str?.=?"上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項(xiàng)指定的值";?break; ????????case?1:?$str?.=?"上傳的文件超過了php.ini中upload_max_filesize選項(xiàng)限制的值";?break; ????????case?-1:?$str?.=?"未允許類型";?break; ????????case?-2:?$str?.=?"文件過大,上傳的文件不能超過{$this->maxsize}個字節(jié)";?break; ????????case?-3:?$str?.=?"上傳失敗";?break; ????????case?-4:?$str?.=?"建立存放上傳文件目錄失敗,請重新指定上傳目錄";?break; ????????case?-5:?$str?.=?"必須指定上傳文件的路徑";?break; ????????default:?$str?.=?"未知錯誤"; ??????} ??????return?$str.'<br>'; ????} ?? ????/*?設(shè)置和$_FILES有關(guān)的內(nèi)容?*/ ????private?function?setFiles($name="",?$tmp_name="",?$size=0,?$error=0)?{ ??????$this->setOption('errorNum',?$error); ??????if($error) ????????return?false; ??????$this->setOption('originName',?$name); ??????$this->setOption('tmpFileName',$tmp_name); ??????$aryStr?=?explode(".",?$name); ??????$this->setOption('fileType',?strtolower($aryStr[count($aryStr)-1])); ??????$this->setOption('fileSize',?$size); ??????return?true; ????} ?? ????/*?為單個成員屬性設(shè)置值?*/ ????private?function?setOption($key,?$val)?{ ??????$this->$key?=?$val; ????} ?? ????/*?設(shè)置上傳后的文件名稱?*/ ????private?function?setNewFileName()?{ ??????if?($this->israndname)?{ ????????$this->setOption('newFileName',?$this->proRandName());?? ??????}?else{? ????????$this->setOption('newFileName',?$this->originName); ??????}? ????} ?? ????/*?檢查上傳的文件是否是合法的類型?*/ ????private?function?checkFileType()?{ ??????if?(in_array(strtolower($this->fileType),?$this->allowtype))?{ ????????return?true; ??????}else?{ ????????$this->setOption('errorNum',?-1); ????????return?false; ??????} ????} ?? ????/*?檢查上傳的文件是否是允許的大小?*/ ????private?function?checkFileSize()?{ ??????if?($this->fileSize?>?$this->maxsize)?{ ????????$this->setOption('errorNum',?-2); ????????return?false; ??????}else{ ????????return?true; ??????} ????} ?? ????/*?檢查是否有存放上傳文件的目錄?*/ ????private?function?checkFilePath()?{ ??????if(empty($this->path)){ ????????$this->setOption('errorNum',?-5); ????????return?false; ??????} ??????if?(!file_exists($this->path)?||?!is_writable($this->path))?{ ????????if?(!@mkdir($this->path,?0755))?{ ??????????$this->setOption('errorNum',?-4); ??????????return?false; ????????} ??????} ??????return?true; ????} ?? ????/*?設(shè)置隨機(jī)文件名?*/ ????private?function?proRandName()?{???? ??????$fileName?=?date('YmdHis')."_".rand(100,999);???? ??????return?$fileName.'.'.$this->fileType;? ????} ?? ????/*?復(fù)制上傳文件到指定的位置?*/ ????private?function?copyFile()?{ ??????if(!$this->errorNum)?{ ????????$path?=?rtrim($this->path,?'/').'/'; ????????$path?.=?$this->newFileName; ????????if?(@move_uploaded_file($this->tmpFileName,?$path))?{ ??????????return?true; ????????}else{ ??????????$this->setOption('errorNum',?-3); ??????????return?false; ????????} ??????}?else?{ ????????return?false; ??????} ????} ??}
拿走不謝
舉報
Discuz你一定聽說過,一起跟著我搞定Discuz二次開發(fā),與眾不同!
1 回答有一個地方?jīng)]有看懂 麻煩懂的小伙伴不吝賜教
1 回答按照視頻中的寫直接報500錯誤是為什么?
1 回答老師,關(guān)于上傳大圖,無損壓縮怎么才能更好展示。
1 回答模版文件未找到或者無法訪問: ./template/default/PHPChina/tool/tool_index.htm
1 回答老師這算是弄插件么??
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-08-29
git.oschina.com去下載啊
拿走不謝