php文件上传类的分享


Posted in PHP onJuly 06, 2017

本文实例为大家分享了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文件上传操作汇总进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php基础教程 php内置函数实例教程
Aug 21 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
PHP7数组的底层实现示例
Aug 25 PHP
PHP图片水印类的封装
Jul 06 #PHP
php生出随机字符串
Jul 06 #PHP
PHP实现的分页类定义与用法示例
Jul 05 #PHP
PHP实现的文件上传类与用法详解
Jul 05 #PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 #PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 #PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 #PHP
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python实现从ftp服务器下载文件
2020/03/03 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
高中校园广播稿
2014/01/11 职场文书
简单的项目建议书模板
2014/03/12 职场文书
经典演讲稿汇总
2014/05/19 职场文书
文艺晚会策划方案
2014/06/11 职场文书
岗位聘任协议书
2015/09/21 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
Golang 编译成DLL文件的操作
2021/05/06 Golang