PHP实现多图片上传类实例


Posted in PHP onJuly 26, 2014

本文所述为一个实用的PHP多图片文件上传类,其支持gif、jpg、jpeg、pjpeg、png格式的多图片上传功能,类中还可限制图片类型、上传图片的大小、设置上传目录、一些提交判断等功能。此外该类并不局限于图片的上传,也可以上传TXT/RAR等文件类型,只是需要对代码进行一下修改,感兴趣的读者可以自己尝试一下。

php多图片上传类完整功能代码如下:

<?php
class more_file_upload{
  const FILE_PATH = '/uploadfile/'; //默认文件上传的目录,请自行修改
  var file_type;
  var file_type_array;
  var file_type_real_array;
  var file_type_string;
  var file_name;
  var file_size;
  var file_tmp_name;
  var file_error;
  var handledate;
  static totalsize = 0;
  function __construct(file_name, file_error, file_size, file_tmp_name, file_type){
    this -> handledate = date('m-d-Y');
    if (!empty(file_name)){
      this -> file_name = file_name;
      this -> file_error = file_error;
      this -> file_size = file_size;
      this -> file_tmp_name = file_tmp_name;
      this -> file_type = file_type;
      this -> file_type_array = array('/', 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png');
      this -> file_type_real_array = array(0.1, 'jpg' => 74707370, 'gif' => 7173, 'bmp' => 6677, 'png' => 807871);
      this -> show_execute_message(this -> file_error, this -> file_name, this -> file_type, this -> file_size);
      }
    }
  function __destruct(){
    this -> file_name = NULL;
    this -> file_error = NULL;
    this -> file_size = NULL;
    this -> file_tmp_name = NULL;
    this -> file_type = NULL;
    self :: totalsize = 0;
    }
  function show_execute_message(smfileerror, smfilename, smfiletype, smfilesize){
    if(smfileerror > 0){
      switch (smfileerror){
      case 1: smfilemessage = '<strong>文件超过服务器的约定大小!</strong>';
        break;
      case 2: smfilemessage = '<strong>文件超过指定的文件大小!</strong>';
        break;
      case 3: smfilemessage = '<strong>文件只上传了部分!</strong>';
        break;
      case 4: echo "this->file_name " . '文件上传失败!<br/>';
        break;
        }
      self :: __destruct();
      }else{
      smfiletypeflag = array_search(smfiletype, this -> file_type_array);
      // 进行真实格式验证
      if(smfiletypeflag != false){
        file = fopen(this -> file_tmp_name, "rb");
        bin = fread(file, 10);
        fclose(file);
        strInfo = @unpack("c10chars", bin);
        typeCode = intval(strInfo['chars1'] . strInfo['chars2']);
        smfiletypeflag = array_search(typeCode, this -> file_type_real_array);
        if(smfiletypeflag == false){ // 判断是否是png图片
          typeCode = intval(strInfo['chars2'] . strInfo['chars3'] . strInfo['chars4']);
          smfiletypeflag = array_search(typeCode, this -> file_type_real_array);
          if(smfiletypeflag == false){ // 判断是否是jpg图片
            $typeCode = intval(strInfo['chars7'] . strInfo['chars8'] . strInfo['chars9'] . strInfo['chars10']);
            smfiletypeflag = array_search(typeCode, this -> file_type_real_array);
            }
          }
        }
      if($smfiletypeflag == false){
        $smfilemessage = '<strong>文件类型不对,请核实!</strong>';
        self :: __destruct();
        }else{
        $resflag = $this -> move_file($this -> file_tmp_name, this -> file_name);
        if (resflag == 1){
          $smfilemessage = '文件上传成功!';
          self :: totalsize += intval($smfilesize);
          self :: __destruct();
          }else{
          $smfilemessage = '<strong>文件上传失败!</strong>';
          self :: __destruct();
          }
        }
      }
    $smfilesizeformat = $this -> size_BKM(smfilesize);
    echo '<tr>
<td align="left" >' . smfilename . '</td>
<td align="center" >' . smfiletype . '</td>
<td align="center" >' . smfilesizeformat . '</td>
<td align="center" >' . smfilemessage . '</td>
</tr>';
    }
  function move_file(mvfiletmp, mvfilename){ // 移动文件
    mvfilenamearr = explode('.', basename(mvfilename));
    mvfilenamearr[0] = this -> rand_string();
    mvfilename = implode('.', mvfilenamearr);
    if (is_uploaded_file(mvfiletmp)){
      uploadfile = self :: FILE_PATH . "mvfilename";
      result = move_uploaded_file(mvfiletmp, uploadfile);
      return result;
      }
    }
  function rand_string(){
    string = md5(uniqid(rand() . microtime()));
    return string;
    }
  function size_BKM(size){ // B/KB/MB单位转换
    if(size < 1024)
    {
      size_BKM = (string)size . " B";
      }
    elseif(size < (1024 * 1024))
      {
      size_BKM = number_format((double)(size / 1024), 1) . " KB";
      }else
      {
      size_BKM = number_format((double)(size / (1024 * 1024)), 1) . " MB";
      }
    return size_BKM;
    }
  }
?>

读者可以将上述代码复制到PHP文件中,并保存文件名为:more_upload_file.class.php,在使用时include该文件即可。

PHP 相关文章推荐
如何获得PHP相关资料
Oct 09 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 #PHP
php中创建和调用webservice接口示例
Jul 25 #PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 #PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 #PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 #PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 #PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 #PHP
You might like
php下连接mssql2005的代码
2011/01/17 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
vue-router项目实战总结篇
2018/02/11 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
TensorFlow损失函数专题详解
2018/04/26 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
本科生详细的自我评价
2013/09/19 职场文书
医大实习自我鉴定
2013/12/07 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
学术会议通知范文
2015/04/15 职场文书
开除员工通知
2015/04/22 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis