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 5.0对象模型深度探索之类的静态成员
Mar 27 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
php去除数组中重复数据
Nov 18 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP中foreach()用法汇总
Jul 02 PHP
php删除数组中重复元素的方法
Dec 22 PHP
PHP抽象类基本用法示例
Dec 28 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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中动态显示签名和ip原理
2007/03/28 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
Python显示进度条的方法
2014/09/20 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
如何通过Python实现标签云算法
2019/07/02 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
售后服务承诺书
2014/03/26 职场文书
怎样写离婚协议书
2014/09/10 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB