温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何实现文件上传类

发布时间:2021-07-24 10:51:28 来源:亿速云 阅读:175 作者:小新 栏目:开发技术

这篇文章主要介绍了php如何实现文件上传类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体内容如下

<?php $upload = new UpLoad(); $upload->uploadFile('fm'); /*打印错误信息*/ // var_dump($upload->errorNumber); // var_dump($upload->errorInfo); class UpLoad{   //文件上传路径   protected $path = 'upload/';   //允许文件上传的后缀   protected $allowSuffix = ['jpg','jpeg',   'gif','wbmp','png'];   //mime类型    protected $allowMime =['image/jpg','image/jpeg',   'image/gif','image/wbmp','image/png'];   //允许上传的大小   protected $maxSize = 2000000;   //是否启用默认的前缀   protected $isRandName =true ;   //文件的前缀   protected $prefix = 'up_';   //错误号和错误信息   protected $errorNumber;   protected $errorInfo;   //文件的信息   //文件名   protected $oldName;   //文件的后缀   protected $suffix;   //文件的大小   protected $size;   //文件的mime   protected $mime;   //文件的临时文件的路径   protected $tmpName;   //文件新名字   protected $newName;      //构造方法   //因为成员属性比较多就用数组来显示   public function __construct($arr =[]){     foreach ($arr as $key=>$value){       $this->setOption($key,$value);     }   }   //判断$key是不是我的成员属性,如果是就设置   protected function setOption($key,$value){     //得到所有的成员属性     $keys = array_keys(get_class_vars(__CLASS__));     if(in_array($key, $keys)){       $this->$key = $value;     }   }   //文件上传函数   //key 就是input框中的name属性值   public function uploadFile($key){     //判断有没有设置路径 path     if(empty($this->path)){       $this->setOption('errorNumber',-1 );       return false;     }     //判断该路径是否存在是否可写     if (!$this->check()){       $this->setOption('errorNumber', -2);       return false;      }     //判断$_FILES里面的error信息是否为0,如果为0则说明文件信息在服务器端可以直接获取,提取信息保存到成员属性中     $error = $_FILES[$key]['error'];     if($error){       $this->setOption('errorNumber', -3);       return false;     }else {       //提取文件相关信息并且保存到成员属性中       $this->getFileInfo($key);     }     //判断文件的大小、mime、后缀是否符合      if(!$this->checkSize() || !$this->checkMime()|| !$this->checkSuffix()){        return false;      }     //得到新的文件名字     $this->newName = $this->createNewName();     //判断是否是上传文件,并且是移动上传文件     if(is_uploaded_file($this->tmpName)){       if(move_uploaded_file($this->tmpName, $this->path.$this->newName)){         return $this->path.$this->newName;       }else {         $this->setOption('errorNumber', -7);         return false;       }     }else{       $this->setOption('errorNumber', -6);       return false;     }   }   //检测文件夹是否存在,是否可写   protected function check(){     //文件夹不存在或者不是目录。创建文件夹     if(!file_exists($this->path) ||!is_dir($this->path)){       return mkdir($this->path,0777,true);     }     //判断文件是否可写     if(!is_writeable($this->path)){       return chmod($this->path, 0777);     }     return true;   }   //根据key得到文件信息   protected function getFileInfo($key){     //得到文件的名字     $this->oldName = $_FILES[$key]['name'];     //得到文件的mime类型     $this->mime = $_FILES[$key]['type'];     //得到文件的临时文件     $this->tmpName = $_FILES[$key]['tmp_name'];     //得到文件大小     $this->size = $_FILES[$key]['size'];     //得到文件后缀     $this->suffix = pathinfo($this->oldName)['extension'];   }   //判断文件大小   protected function checkSize(){     if($this->size > $this->maxSize){       $this->setOption('errorNumber', -3);       return false;     }     return true;   }   //判断mime类型   protected function checkMime(){     if(!in_array($this->mime, $this->allowMime)){       $this->setOption('errorNumber', -4);       return false;     }     return true;   }   //判断后缀   protected function checkSuffix(){     if(!in_array($this->suffix, $this->allowSuffix)){       $this->setOption('errorNumber', -5);       return false;     }     return true;   }   //创建新名字   protected function createNewName(){     if($this->isRandName){       $name = $this->prefix.uniqid().'.'.$this->suffix;     }else {       $name = $this->prefix.$this->oldName;     }     return $name;   }   public function __get($name){     if($name == 'errorNumber'){       return $this->errorNumber;     }elseif ($name == 'errorInfo'){       return $this->getErrorInfo();     }   }   protected function getErrorInfo(){     switch ($this->errorNumber){     case -1:       $str = '文件路径没有设置';       break;     case -2:       $str = '文件不是目录或者不可写';       break;     case -3:       $str = '文件超过指定大小';       break;     case -4:       $str = 'mime类型不符合';       break;     case -5:       $str = '文件后缀不符合';       break;     case -6:       $str = '不是上传文件';       break;     case -7:       $str = '移动失败';       break;     case 1:       $str = '超出ini设置大小';       break;     case 2:       $str = '超出html表单大小';       break;     case 3:       $str = '文章只有部分上传';       break;     case 4:       $str = '没有文件上传';       break;     case 6:       $str = '找不到临时文件';       break;     case 7:       $str = '文件写入失败';       break;     }     return $str;   } }
<!doctype html> <html lang="en"> <head>   <meta charset="UTF-8" />   <title>文件上传</title> </head> <body> <form action="UpLoad.php" method="post" enctype="multipart/form-data" >    <input type="file" name="fm" value=""><br>   <input type="submit" value="上传文件" /><br>   </form> </body> </html>

注意:input中的name必须和上传类中的uploadFile中是传值一致!

感谢你能够认真阅读完这篇文章,希望小编分享的“php如何实现文件上传类”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI