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中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
php页面缓存方法小结
Jan 10 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
php轻松实现文件上传功能
Mar 03 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
php用户名的密码加密更安全的方法
Jun 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
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
如何打开php的gd2库
2017/02/09 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
Python pandas库中的isnull()详解
2019/12/26 Python
python实现猜拳游戏
2020/03/04 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
为什么需要版本控制?
2013/08/08 面试题
2014年教师培训的自我评价
2014/01/03 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
美术社团活动总结
2014/06/27 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
2015年度物流工作总结
2015/04/30 职场文书
老人与海读书笔记
2015/06/26 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
Nginx安装配置详解
2022/06/25 Servers