侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

一个非常实用的php文件上传类

php  /  管理员 发布于 7年前   150

其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。

下面的代码放在一个名为UploadFile.class.php文件内

rand_name = $rand_name;      $this->save_path = $save_path;      $this->allow_type = $this->get_allow_type($allow_type);    }        /**     * 上传文件     * 在上传文件前要做的工作     * (1) 获取文件所有信息     * (2) 判断上传文件是否合法     * (3) 设置文件存放路径     * (4) 是否重命名     * (5) 上传完成     * @param array $file 上传文件     *     $file须包含$file['name'], $file['size'], $file['error'], $file['tmp_name']     */    public function upload_file($file){      //$this->file   = $file;      $this->file_name   = $file['name'];      $this->file_size   = $file['size'];      $this->error     = $file['error'];      $this->file_tmp_name = $file['tmp_name'];$this->ext = $this->get_file_type($this->file_name);switch($this->error){        case 0: $this->msg = ''; break;        case 1: $this->msg = '超出了php.ini中文件大小'; break;        case 2: $this->msg = '超出了MAX_FILE_SIZE的文件大小'; break;        case 3: $this->msg = '文件被部分上传'; break;        case 4: $this->msg = '没有文件上传'; break;        case 5: $this->msg = '文件大小为0'; break;        default: $this->msg = '上传失败'; break;      }      if($this->error==0 && is_uploaded_file($this->file_tmp_name)){        //检测文件类型        if(in_array($this->ext, $this->allow_type)==false){          $this->msg = '文件类型不正确';          return false;        }        //检测文件大小        if($this->file_size > $this->max_size){          $this->msg = '文件过大';          return false;        }      }      $this->set_file_name();      $this->uploaded = $this->save_path.$this->new_name;      if(move_uploaded_file($this->file_tmp_name, $this->uploaded)){        $this->msg = '文件上传成功';        return true;      }else{        $this->msg = '文件上传失败';        return false;      }    }        /**    * 设置上传后的文件名    * 当前的毫秒数和原扩展名为新文件名    */    public function set_file_name(){      if($this->rand_name==true){        $a = explode(' ', microtime());        $t = $a[1].($a[0]*1000000);        $this->new_name = $t.'.'.($this->ext);      }else{        $this->new_name = $this->file_name;      }    }        /**    * 获取上传文件类型    * @param string $filename 目标文件    * @return string $ext 文件类型    */    public function get_file_type($filename){      $ext = pathinfo($filename, PATHINFO_EXTENSION);      return $ext;    }        /**     * 获取可上传文件的类型     */    public function get_allow_type($allow_type){      $s = array();      if(is_array($allow_type)){        foreach($allow_type as $value){          $s[] = $value;        }      }else{        $s = preg_split("/[\s,|;]+/", $allow_type);      }      return $s;    }        //获取错误信息    public function get_msg(){      return $this->msg;    }  }?>

其实上面的代码中还有一个可以改进的地方,就是将那些以‘file_'开头的变量缩写为一个$file数组,这样感觉更好一些。

下面我们来测试一下上面的代码。我在一个名为upfile.php文件写测试代码,同时将UploadFile.class.php放在同一个路径下。

    upfile   0){        echo "Error: " . $_FILES["file"]["error"] . "
"; }else{ $file = $_FILES['file']; $upload = new UploadFile(true, './images/', array('jpg', 'jpeg', 'png')); $upload->upload_file($file); echo $upload->get_msg(); } }else{ ?>

在上面的代码中,我们可以尝试修改第15行的参数,用来判断一下我们写的方法是否正确。

这3个参数的含义分别表示:是否使用系统命名、文件存放的路径(相对)、允许上传的文件类型。那么就试试修改这3个参数会发生什么样的变化:(1)把true改为false是否就可以使用它原来的名字了;(2)改下存放路径,看看能不能依然能够上传;(3)试试上传几个不允许的文件,看能不能禁止住,而且关键第三个参数有两种形式,一种是数组,就像示例中一样;还有一种是字符串,用分隔符隔开就行, 'jpg|jpeg|png|gif', 'jpg jpeg png gif', 'jpg,jpeg,png,gif'都行。

好的,文件上传类就这样写好了。

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

您可能感兴趣的文章:

  • PHP move_uploaded_file() 函数(将上传的文件移动到新位置)
  • PHP上传 找不到临时文件夹的解决方法
  • 详解python上传文件和字符到PHP服务器
  • php实现网页常见文件上传功能
  • php判断文件上传图片格式的实例详解
  • PHP大文件分割上传 PHP分片上传
  • PHP中TP5 上传文件的实例详解
  • php使用ftp实现文件上传与下载功能
  • PHP大文件分片上传的实现方法


  • 上一条:
    phpcms配置列表页以及获得文章发布时间
    下一条:
    php基于数组函数实现关联表的编辑操作示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客