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和MySql来与ODBC数据连接
Oct 09 PHP
php桌面中心(三) 修改数据库
Mar 11 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
php实现监听事件
Nov 06 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
PHP实现登录验证码校验功能
May 17 PHP
php7新特性的理解和比较总结
Apr 14 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的历史和优缺点
2006/10/09 PHP
php解析xml方法实例详解
2015/05/12 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
Python格式化输出%s和%d
2018/05/07 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python opencv摄像头的简单应用
2019/06/06 Python
python3字符串操作总结
2019/07/24 Python
django的csrf实现过程详解
2019/07/26 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
python实现的汉诺塔算法示例
2019/10/23 Python
制药工程专业应届生求职信
2013/09/24 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
高一数学教学反思
2016/02/18 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL