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 Smarty初体验二 获取配置信息
Aug 08 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php的socket编程详解
Nov 20 PHP
php实现mysql连接池效果实现代码
Jan 25 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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时间戳使用实例代码
2008/06/07 PHP
一个PHP分页类的代码
2011/05/18 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php格式文件打开的四种方法
2018/02/24 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
全面理解Python中self的用法
2016/06/04 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Python实现点云投影到平面显示
2020/01/18 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
软件工程师面试题
2012/06/25 面试题
EJB实例的生命周期
2016/10/28 面试题
应届生高等护理求职信
2013/10/12 职场文书
自荐信格式技巧有哪些呢
2013/11/19 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
党性观念心得体会
2014/09/03 职场文书
市级三好学生评语
2014/12/29 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
golang定时器
2022/04/14 Golang
正则表达式基础与常用验证表达式
2022/06/16 Javascript