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下判断数组中是否存在相同的值array_unique
Mar 25 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
java解析json方法总结
May 16 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
php实现记事本案例
Oct 20 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将时间差转换为字符串提示
2011/09/07 PHP
php面向对象值单例模式
2016/05/03 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python 求定积分和不定积分示例
2019/11/20 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
简历中个人自我评价范文
2013/12/26 职场文书
党员承诺书范文
2014/05/19 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
亮剑观后感600字
2015/06/05 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript