适用于初学者的简易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_SELF的安全问题
Sep 05 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
php url路由入门实例
Apr 23 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
利用php输出不同的心形图案
Apr 22 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
php使用event扩展的io复用测试的示例
Oct 20 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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
jQuery中:first选择器用法实例
2014/12/30 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python如何执行系统命令
2020/09/23 Python
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
上班迟到检讨书
2014/01/10 职场文书
安全承诺书范文
2014/03/26 职场文书
小学课外阅读总结
2014/07/09 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
销售员态度差检讨书
2014/10/26 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年科普工作总结
2015/07/23 职场文书
体育教师研修感悟
2015/11/18 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang