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 flv视频时间获取函数
Jun 29 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
Linux中为php配置伪静态
Dec 17 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
php简单处理XML数据的方法示例
May 19 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
is_file和file_exists效率比较
Mar 14 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python动态参数用法实例分析
2015/05/25 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python实现KNN邻近算法
2021/01/28 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
应用数学自荐书范文
2013/11/24 职场文书
教师的实习鉴定
2013/12/15 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
新店开张宣传语
2015/07/13 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android