适用于初学者的简易PHP文件上传类


Posted in PHP onOctober 29, 2015

本文实例讲述了PHP多文件上传类,分享给大家供大家参考。具体如下:

<?php
class Test_Upload{
 
  protected $_uploaded = array();
  protected $_destination;  
  protected $_max = 1024000;
  protected $_messages = array();
  protected $_permited = array(
                'image/gif',
                'image/jpeg',
                'image/pjpeg',
                'image/png'  
  );
  protected $_renamed = false;
   
  /**
   * 
   * @param mix $path
   * 
   */
  public function __construct($path){
     
    if (!is_dir($path) || !is_writable($path)){
      throw new Exception("文件名不可写,或者不是目录!");
    }
    $this->_destination = $path;
    $this->_uploaded = $_FILES;
  }
  /**
   * 移动文件
   * 
   */
  public function move(){
     
    $filed = current($this->_uploaded); 
       
    $isOk = $this->checkError($filed['name'], $filed['error']);
    //debug ok
    if ($isOk){
      $sizeOk = $this->checkSize($filed['name'], $filed['size']);
      $typeOk = $this->checkType($filed['name'], $filed['type']);
      if ($sizeOk && $typeOk){
         
        $success = move_uploaded_file($filed['tmp_name'], $this->_destination.$filed['name']);
         
        if ($success){
          $this->_messages[] = $filed['name']."文件上传成功";
        }else {
          $this->_messages[] = $filed['name']."文件上传失败";
        }
      }
       
    }
  }
  /**
   * 查询messages数组内容 
   *
   */
  public function getMessages(){
    return $this->_messages;
  }
   
  /**
   * 检测上传的文件大小
   * @param mix $string
   * @param int $size
   */
  public function checkSize($filename, $size){
     
    if ($size == 0){
      return false;
    }else if ($size > $this->_max){
      $this->_messages[] = "文件超出上传限制大小".$this->getMaxsize();
      return false;
    }else { 
      return true;
    }
  }
   
  /**
   * 检测上传文件的类型
   * @param mix $filename
   * @param mix $type
   */
  protected function checkType($filename, $type){
    if (!in_array($type, $this->_permited)){
      $this->_messages[] = "该文件类型是不被允许的上传类型";
      return false;
    }else {
      return true;
    }
  }
   
  /**
   * 获取文件大小
   * 
   */
  public function getMaxsize(){
    return number_format($this->_max / 1024, 1).'KB';
  }
   
  /**
   * 检测上传错误
   * @param mix $filename
   * @param int $error
   * 
   */
  public function checkError($filename, $error){
    switch ($error){
      case 0 : return true;
      case 1 :
      case 2 : $this->_messages[] = "文件过大!"; return true;
      case 3 : $this->_messages[] = "错误上传文件!";return false;
      case 4 : $this->_messages[] = "没有选择文件!"; return false;
      default : $this->_messages[] = "系统错误!"; return false;
    }
  }
}
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
PHP文件操作实例总结
Sep 27 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
调试php程序的简单步骤
Oct 04 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
php实现网站文件批量压缩下载功能
Oct 28 #PHP
php简单日历函数
Oct 28 #PHP
php将数组存储为文本文件方法汇总
Oct 28 #PHP
php如何获取文件的扩展名
Oct 28 #PHP
php检查页面是否被百度收录
Oct 28 #PHP
PHP加密解密函数详解
Oct 28 #PHP
php实现阳历阴历互转的方法
Oct 28 #PHP
You might like
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python re模块常见用法例举
2021/03/01 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
委托证明书
2014/09/17 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
周一问候语大全
2015/11/10 职场文书
2019教师的学习计划
2019/06/25 职场文书
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python