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之变量、常量学习笔记
Mar 27 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php时间戳转换的示例
Mar 31 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 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文件注释标记及规范小结
2012/04/01 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python 图片验证码代码
2008/12/07 Python
Python注释详解
2016/06/01 Python
python最长回文串算法
2018/06/04 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python如何求100以内的素数
2020/05/27 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
环境科学专业个人求职信
2013/09/26 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
自荐信格式范文
2015/03/04 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python