php 文件上传类

来源:互联网 发布:微观数据的弊端 编辑:程序博客网 时间:2024/05/30 22:56
<?php/** * 文件上传类 * 2011/9/22 * kcj * */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;                      //允许文件上传的最大度是2Mprivate  $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;}}?>

原创粉丝点击