PHP实现上传多文件示例代码


Posted in PHP onFebruary 20, 2017

上传多文件

1.在对多文件信息进行操作前,需要构建文件信息,通过buildInfo函数将三维数组转换成便于文件操作的二维数组。

function buildInfo(){
  $i = 0;
  foreach ($_FILES as $v){
    //判断是否是单文件
    if(is_string($v['name'])){
      $files[$i] = $v;
      $i++;
    }else{
      //多文件
      foreach ($v['name'] as $key => $value){
        $files[$i]['name'] = $value;
        $files[$i]['size'] = $v['size'][$key];
        $files[$i]['tmp_name'] = $v['tmp_name'][$key];
        $files[$i]['type'] = $v['type'][$key];
        $files[$i]['error'] = $v['error'][$key];
        $i++;
      }
    }
  }
  return $files;
}

单文件和多文件的判断在于文件数组的类型,单文件(二维数组)、多文件(三维数组)。

2.文件上传函数及参数

function uploadFiles($path = "uploads",  $allowExt = array("jpg", "gif", "png", "wbmp"), $maxSize = 1048576, $imgFlag = true)

path,保存目录。allowExt,允许扩展名数组。maxSize最大上传文件大小。imgFlag,图片文件标识符。

3.判断保存文件的目录是否存在

if(!file_exists($path)){
    mkdir($path, 0777, true);
  }

4.传入构建好的文件信息,保存到files

$i = 0;
$files = buildInfo();

5.判断文件的error类型

foreach ($files as $file){
    if($file['error'] == UPLOAD_ERR_OK){
}else{
    switch ($file['error']){
      case 1:
        $mes = "超过配置文件上传文件大小";
        break;
      case 2:
        $mes = "超过了表单设置";
        break;
      case 3:
        $mes = "文件部分被上传";
        break;
      case 4:
        $mes = "没有文件上传";
        break;
      case 6:
        $mes = "没找到临时目录";
        break;
      case 7:
        $mes = "文件不可写";
        break;
      case 8:
        $mes = "由于PHP的扩展程序中断了文件上传";
        break;
    }

6.限制文件类型

if($file['error'] == UPLOAD_ERR_OK){
      $ext = getExt($file['name']);
      if(!in_array($ext, $allowExt)){
        exit("非法文件类型");
      }

7.限制是否为真的图片类型

if($imgFlag){
        if(!getimagesize($file['tmp_name'])){
          exit("不是真的图片类型");
        }
      }

8.判断文件大小

if($file['size'] > $maxSize){
        exit("文件过大");
      }

9.判断文件是否通过post上传

if(!is_uploaded_file($file[‘tmp_name'])){ 
exit(“文件不是通过HTTP POST上传”); 
}

10.重命名文件(唯一且不重复)并保存到目标目录

$filename = getUniName().".".$ext;
$destination = $path."/".$filename;
if(move_uploaded_file($file['tmp_name'], $destination)){
        $mes = "文件上传成功";
        $file['name'] = $filename;
        unset($file['error'], $file['tmp_name']);
        $uploadedFiles[$i] = $file;
        $i++;
      }

重写文件信息数组中的name,删除变量file[‘error']和file[‘tmp_name']。最后将成功上传的文件保存到uploadedFiles数组中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中的串行化变量和序列化对象
Sep 05 PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
php之Memcache学习笔记
Jun 17 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
微信公众号开发之通过接口删除菜单
Feb 20 #PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 #PHP
php防止sql注入的方法详解
Feb 20 #PHP
php获取给定日期相差天数的方法分析
Feb 20 #PHP
phpstudy默认不支持64位php的解决方法
Feb 20 #PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 #PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 #PHP
You might like
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
php实现的顺序线性表示例
2019/05/04 PHP
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
webpack实用小功能介绍
2018/01/02 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
Vue 事件处理操作实例详解
2019/03/05 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
使用python解析xml成对应的html示例分享
2014/04/02 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
中文系师范生自荐信
2013/10/01 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android