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 cron中的批处理
Sep 16 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
python中requests模块的使用方法
2015/04/08 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
详解Python中的路径问题
2020/09/02 Python
django中ImageField的使用详解
2020/12/21 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
JSP&Servlet技术面试题
2015/05/21 面试题
酒店前台接待岗位职责
2013/12/03 职场文书
关于逃课的检讨书
2014/01/23 职场文书
市场开发计划书
2014/05/07 职场文书
法制演讲稿
2014/09/10 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
检讨书格式范文
2015/05/07 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
聘任书范文大全
2015/09/21 职场文书