适用于初学者的简易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 相关文章推荐
测试您的 PHP 水平的题目
May 30 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
国外PHP程序员的13个好习惯小结
Feb 20 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
php输出xml必须header的解决方法
Oct 17 PHP
PHP生成短网址方法汇总
Jul 12 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
PHP构造二叉树算法示例
Jun 21 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP 布尔值的自增与自减的实现方法
May 03 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
一些PHP写的小东西
2006/12/06 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
php 启动报错如何解决
2014/01/17 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
javascript的BOM
2016/05/03 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
了解重排与重绘
2019/05/29 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
《搭石》教学反思
2014/04/07 职场文书
学生期末评语大全
2014/04/30 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
大学学生个人总结
2015/02/15 职场文书
赤壁观后感(2)
2015/06/15 职场文书
中学教师读书笔记
2015/07/01 职场文书
学生检讨书范文
2019/06/24 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers