Heim  >  Artikel  >  Backend-Entwicklung  >  一个php文件上传类

一个php文件上传类

WBOY
WBOYOriginal
2016-07-25 09:00:24927Durchsuche
一个简单的php文件上传类,可以自定义文件名,可以设置允许上传的文件类型等,有需要的朋友,可以参考学习下。

代码如下:

<?php  
    /** 
     * 文件上传类 
     * bbs.it-home.org
     * */  
    class UpFile{  
        private  $filePath;                             //文件目的路径  
        private  $fileField;                            //默认$_FILES[$fileField],通过$_FILES环境变量获取上传文件信息  
        private  $originName;                           //源文件名  
        private  $tmpFileName;                          //临时文件名  
        private  $fileType;                             //文件类型  
        private  $fileSize;                             //文件大小  
        private  $newFileName;                          //新文件名  
        private  $allowType=array('jpg','gif','png');   //  
        private  $maxSize=2000000;                      //允许文件上传的最大度是2M  
        private  $isUserDefName=false;                  //是否采用用户自定义名  
        private  $userDefName;                          //用户定义名称  
        private  $isRandName=true;                      //是否随机命名  
        private  $randName;                             //系统随机名称  
        private  $errorNum=0;                           //错误号  
        private  $isCoverModer=true;                    //是否覆盖模式  
          
        function  __construct($options=array()){  
            $this->setOptions($options);        //设置上传时属性列表  
        }  
          
        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();  //上传文件  
        }  
        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);  
            }  
        }  
        private function setFiles(){  
            if($this->getFileErrorFromFILES!=0){  
                $this->setOptions('errorNum',-1);  
                return $this->errorNum;  
            }  
            $this->setOption('originName',$this->getFileNameFromFILES());  
            $this->setOption('tmpFileName',$this->getTmpFileNameFromFILES());  
            $this->setOption('fileType',$this->getFileTypeFromFILES());  
            $this->setOption('fileSize',$this->getFileSizeFromFILES());  
          
        }  
        private function setOption($key,$val){  
            $this->$key=$val;  
        }  
        private  function setNewFileName(){  
            if($this->isRandName==false&&$this->isUserDefName==false){  
                $this->setOption('newFileName',$this->originName);  
            }elseif ($this->isRandName==true&&$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);  
            }  
        }  
        private function checkValid(){  
            $this->checkFileSize();  
            $this->checkFileType();  
        }  
        private function checkFileType(){  
            if(!in_array($this->fileType,$this->allowType)){  
                $this->setOption('errorNum',-2);  
            }else {  
                return $this->errorNum;  
            }  
        }  
        private  function checkFileSize(){  
            if($this->fileSize>$this->maxSize){  
                $this->setOption('errorNum',-3);  
            }else {  
                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="";  
            for ($i=0;$i<8;$i++){  
                $num=rand(0,strlen($tmpStr));  
                $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;  
        }  
        function getNewFileName(){  
           return   $this->newFileName;  
        }  
        private function getFileErrorFromFILES(){  
            return  $this->fileField['error'];  
        }  
        private function getFileTypeFromFILES(){  
            $str=$this->fileField['name'];  
            $aryStr=split("\.",$str);                //将字符串分割到数组中  
            $ret=strtolower($aryStr[count($aryStr)-1]);  
            return  $ret;  
        }  
        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;  
        }  
    }      
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn