<?<span>php </span><span>class</span><span> FileUpload { </span><span>private</span> $filepath; <span>//</span><span>指定上传文件保存的路径</span><span>private</span> $allowtype=array(<span>'</span><span>gif</span><span>'</span>, <span>'</span><span>jpg</span><span>'</span>, <span>'</span><span>png</span><span>'</span>, <span>'</span><span>jpeg</span><span>'</span>); <span>//</span><span>充许上传文件的类型</span><span>private</span> $maxsize=<span>1000000</span>; <span>//</span><span>允上传文件的最大长度 1M</span><span>private</span> $israndname=<span>true</span>; <span>//</span><span>是否随机重命名, true false不随机,使用原文件名</span><span>private</span> $originName; <span>//</span><span>源文件名称</span><span>private</span> $tmpFileName; <span>//</span><span>临时文件名</span><span>private</span> $fileType; <span>//</span><span>文件类型</span><span>private</span> $fileSize; <span>//</span><span>文件大小</span><span>private</span> $newFileName; <span>//</span><span>新文件名</span><span>private</span> $errorNum=<span>0</span>; <span>//</span><span>错误号</span><span>private</span> $errorMess=<span>""</span>; <span>//</span><span>用来提供错误报告 </span><span>//</span><span>用于对上传文件初使化 </span><span>//</span><span>1. 指定上传路径, 2,充许的类型, 3,限制大小, 4,是否使用随机文件名称 </span><span>//</span><span>让用户可以不用按位置传参数,后面参数给值不用将前几个参数也提供值</span> function __construct($opti>array()){ </span><span>foreach</span>($options <span>as</span> $key=><span>$val){ $key</span>=<span>strtolower($key); </span><span>//</span><span>查看用户参数中数组的下标是否和成员属性名相同</span><span>if</span>(!in_array($key,get_class_vars(get_class($<span>this</span><span>)))){ </span><span>continue</span><span>; } $</span><span>this</span>-><span>setOption($key, $val); } } </span><span>private</span><span> function getError(){ $str</span>=<span>"</span><span>上传文件<font color='red'>{$this->originName}</font>时出错:</span><span>"</span><span>; </span><span>switch</span>($<span>this</span>-><span>errorNum){ </span><span>case</span><span>4</span>: $str .= <span>"</span><span>没有文件被上传</span><span>"</span>; <span>break</span><span>; </span><span>case</span><span>3</span>: $str .= <span>"</span><span>文件只被部分上传</span><span>"</span>; <span>break</span><span>; </span><span>case</span><span>2</span>: $str .= <span>"</span><span>上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值</span><span>"</span>; <span>break</span><span>; </span><span>case</span><span>1</span>: $str .= <span>"</span><span>上传文件超过了php.ini 中upload_max_filesize选项的值</span><span>"</span>; <span>break</span><span>; </span><span>case</span> -<span>1</span>: $str .= <span>"</span><span>末充许的类型</span><span>"</span>; <span>break</span><span>; </span><span>case</span> -<span>2</span>: $str .= <span>"</span><span>文件过大,上传文件不能超过{$this->maxSize}个字节</span><span>"</span>; <span>break</span><span>; </span><span>case</span> -<span>3</span>: $str .= <span>"</span><span>上传失败</span><span>"</span>; <span>break</span><span>; </span><span>case</span> -<span>4</span>: $str .= <span>"</span><span>建立存放上传文件目录失败,请重新指定上传目录</span><span>"</span>; <span>break</span><span>; </span><span>case</span> -<span>5</span>: $str .= <span>"</span><span>必须指定上传文件的路径</span><span>"</span>; <span>break</span><span>; </span><span>default</span>: $str .= <span>"</span><span>末知错误</span><span>"</span><span>; } </span><span>return</span> $str.<span>'</span><span><br></span><span>'</span><span>; } </span><span>//</span><span>用来检查文件上传路径</span><span>private</span><span> function checkFilePath(){ </span><span>if</span>(empty($<span>this</span>-><span>filepath)) { $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>5</span><span>); </span><span>return</span><span>false</span><span>; } </span><span>if</span>(!file_exists($<span>this</span>->filepath) || !is_writable($<span>this</span>-><span>filepath)){ </span><span>if</span>(!@mkdir($<span>this</span>->filepath, <span>0755</span><span>)){ $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>4</span><span>); <strong>*本文来@源gao@daima#com搞(%代@#码@网2</strong><pre>搞代gaodaima码
returnfalse; } } returntrue; } //用来检查文件上传的大小private function checkFileSize() { if($this->fileSize > $this->maxsize){ $this->setOPtion(‘errorNum‘, ‘-2‘); returnfalse; }else{ returntrue; } } //用于检查文件上传类型private function checkFileType() { if(in_array(strtolower($this->fileType), $this->allowtype)) { returntrue; }else{ $this->setOption(‘errorNum‘, –1); returnfalse; } } //设置上传后的文件名称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(); returnfalse; } $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()){ returntrue; }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)) { returntrue; }else{ $this->setOption(‘errorNum‘, –3); returnfalse; } }else{ returnfalse; } } //设置和$_FILES有关的内容private function setFiles($name=“”, $tmp_name=”, $size=0, $error=0){ $this->setOption(‘errorNum‘, $error); if($error){ returnfalse; } $this->setOption(‘originName‘, $name); $this->setOption(‘tmpFileName‘, $tmp_name); $arrStr=explode(‘.‘, $name); $this->setOption(‘fileType‘, strtolower($arrStr[count($arrStr)-1])); $this->setOption(‘fileSize‘, $size); returntrue; } //用于获取上传后文件的文件名 function getNewFileName(){ return $this->newFileName; } //上传如果失败,则调用这个方法,就可以查看错误报告 function getErrorMsg() { return $this->errorMess; } }
以上就介绍了PHP设计超级好用的文件上传处理类一 (37),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。