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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
Jan 22 PHP
PHP网络操作函数汇总
May 18 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
php装饰者模式简单应用案例分析
Oct 23 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
PHP CURL使用详解
2019/03/21 PHP
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
pygame实现五子棋游戏
2019/10/29 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
上海期货面试题
2014/01/31 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
好军嫂事迹材料
2014/01/15 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
商场租赁意向书
2014/07/30 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
从原生JavaScript到React深入理解
2022/07/23 Javascript