php上传类

来源:互联网 发布:小学生画图软件 编辑:程序博客网 时间:2024/05/17 09:16
<?phpclass FileUpload {private $filepath;     //指定上传文件保存的路径private $allowtype=array('gif', 'jpg', 'png', 'jpeg');  //充许上传文件的类型private $maxsize=1000000;  //允上传文件的最大长度 1Mprivate $israndname=true;  //是否随机重命名, true false不随机,使用原文件名private $originName;   //源文件名称private $tmpFileName;   //临时文件名private $fileType;  //文件类型private $fileSize;  //文件大小private $newFileName; //新文件名private $errorNum=0;  //错误号private $errorMess=""; //用来提供错误报告//用于对上传文件初使化//1. 指定上传路径, 2,充许的类型, 3,限制大小, 4,是否使用随机文件名称//让用户可以不用按位置传参数,后面参数给值不用将前几个参数也提供值function __construct($options=array()){foreach($options as $key=>$val){$key=strtolower($key);//查看用户参数中数组的下标是否和成员属性名相同if(!in_array($key,get_class_vars(get_class($this)))){continue;}$this->setOption($key, $val);} }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选项指定的值"; break;case 1: $str .= "上传文件超过了php.ini 中upload_max_filesize选项的值"; break;case -1: $str .= "末充许的类型"; break;case -2: $str .= "文件过大,上传文件不能超过{$this->maxSize}个字节"; break;case -3: $str .= "上传失败"; break;case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;case -5: $str .= "必须指定上传文件的路径"; break;default: $str .=  "末知错误";}return $str.'<br>';}//用来检查文件上传路径private function checkFilePath(){if(empty($this->filepath)) {$this->setOption('errorNum', -5);return false;}if(!file_exists($this->filepath) || !is_writable($this->filepath)){if(!@mkdir($this->filepath, 0755)){$this->setOption('errorNum', -4);return false;}}return true;}//用来检查文件上传的大小private function checkFileSize() {if($this->fileSize > $this->maxsize){$this->setOPtion('errorNum', '-2');return false;}else{return true;}}//用于检查文件上传类型private function checkFileType() {if(in_array(strtolower($this->fileType), $this->allowtype)) {return true;}else{$this->setOption('errorNum', -1);return false;}}//设置上传后的文件名称private function setNewFileName(){if($this->israndname){$this->setOption('newFileName', $this->proRandName());} else {$this->setOption('newFileName', $this->originName);}}//设置随机文件名称private function proRandName(){$fileName=date("YmdHis").rand(100,999);return $fileName.'.'.$this->fileType;}private function setOption($key, $val){$this->$key=$val;}//用来上传一个文件function uploadFile($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'];if(is_Array($name)){$errors=array();for($i=0; $i<count($name); $i++){if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){if(!$this->checkFileSize() || !$this->checkFileType()){$errors[]=$this->getError();$return=false;}}else{$error[]=$this->getError();$return=false;}if(!$return)$this->setFiles();}if($return){$fileNames=array();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;}else{$fileNames[]=$this->newFileName;}}}$this->newFileName=$fileNames;}$this->errorMess=$errors;return $return;} else {if($this->setFiles($name, $tmp_name, $size, $error)){if($this->checkFileSize() && $this->checkFileType()){$this->setNewFileName();if($this->copyFile()){return true;}else{$return=false;}}else{$return=false;}}else{$return=false;}if(!$return)$this->errorMess=$this->getError();return $return;}}private function copyFile(){if(!$this->errorNum){$filepath=rtrim($this->filepath, '/').'/';$filepath.=$this->newFileName;if(@move_uploaded_file($this->tmpFileName, $filepath)){return true;}else{$this->setOption('errorNum', -3);return false;}}else{return false;}}//设置和$_FILES有关的内容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);$arrStr=explode('.', $name); $this->setOption('fileType', strtolower($arrStr[count($arrStr)-1]));$this->setOption('fileSize', $size);return true;}//用于获取上传后文件的文件名function getNewFileName(){return $this->newFileName;}//上传如果失败,则调用这个方法,就可以查看错误报告function getErrorMsg() {return $this->errorMess;}}

原创粉丝点击