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 相关文章推荐
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
Jan 10 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
PHP5中使用DOM控制XML实现代码
May 07 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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
加速XP搜索功能堪比vista
2007/03/22 PHP
php之Memcache学习笔记
2013/06/17 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
深入了解Django中间件及其方法
2019/07/26 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
python实现tail -f 功能
2020/01/17 Python
django实现后台显示媒体文件
2020/04/07 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python Paramiko使用示例
2020/09/21 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
小学生检讨书大全
2014/02/06 职场文书
小学评语大全
2014/04/22 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
师德模范事迹材料
2014/06/03 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL