PHP设计超级好用的文件上传处理类一 (37)

原创
2016-08-08 09:23:24 579浏览

php
    class 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($opti>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="上传文件{$this->originName}时出错:";

            switch($this->errorNum){
                case4: $str .= "没有文件被上传"; break;
                case3: $str .= "文件只被部分上传"; break;
                case2: $str .= "上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
                case1: $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.'
'; } //用来检查文件上传路径private function checkFilePath(){ if(empty($this->filepath)) { $this->setOption('errorNum', -5); returnfalse; } if(!file_exists($this->filepath) || !is_writable($this->filepath)){ if(!@mkdir($this->filepath, 0755)){ $this->setOption('errorNum', -4); 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){ 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){ 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教程有兴趣的朋友有所帮助。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。