适用于初学者的简易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 15 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
如何打开php的gd2库
Feb 09 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
php7下的filesize函数
Sep 30 PHP
PHP架构及原理知识点详解
Dec 22 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简单防盗链验证实现方法
2016/07/09 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python实现手机通讯录搜索功能
2018/02/22 Python
深入浅析Python传值与传址
2018/07/10 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
护理自我鉴定范文
2013/10/06 职场文书
军训教官感言
2014/03/02 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
电子商务专业自荐信
2014/06/02 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书