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 在文件指定行插入数据的代码
May 08 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
php中file_exists函数使用详解
May 08 PHP
php对象和数组相互转换的方法
May 12 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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 park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
详解Python的三种可变参数
2019/05/08 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
村委会贫困证明
2014/01/14 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
生产设备维护保养制度
2015/08/06 职场文书