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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
Apache设置虚拟WEB
Oct 09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
YII实现分页的方法
Jul 09 PHP
避免Smarty与CSS语法冲突的方法
Mar 02 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
php正则表达式学习笔记
Nov 13 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
Thinkphp集成抖音SDK的实现方法
Apr 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/03/28 PHP
php MySQL与分页效率
2008/06/04 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python 去除字符串中指定字符串
2020/03/05 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
汉语言文学专业自荐信
2014/06/11 职场文书
企业领导对照检查材料
2014/08/20 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
校运会宣传稿大全
2015/07/23 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书