我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP多文件上传实现格式化的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP多文件上传实现格式化的方法

这篇文章主要介绍PHP多文件上传实现格式化的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php有什么特点

1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、面向对象编程:PHP提供了类和对象。5、版本更新速度快。6、具有丰富的功能。7、可伸缩性。8、功能全面,包括图形处理、编码与解码、压缩文件处理、xml解析等。

文件上传是所有web应用中最常见的功能,而PHP实现这一功能也非常的简单,只需要前端设置表单的 enctype 值为 multipart/form-data 之后,我们就可以通过 $_FILES 获得表单中的 file 控件中的内容。

同时,我们还可以将 file 控件的名称写成带 [] 的数组形式,这样我们就可以接收到多个上传的文件。比如下面这个测试用的表单:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head><body>    <form action="" enctype="multipart/form-data" method="post">    myfile1:<input type="file" name="myfile[]"/><br/>    myfile2:<input type="file" name="myfile[a][]"/><br/>    myfile3:<input type="file" name="myfile[a][b][]"/><br/>    myfile4:<input type="file" name="myfile[c][]"/><br/>    myfile5:<input type="file" name="myfile[]"/><br/>    myfile6:<input type="file" name="myfile[][]"/><br/>    <br/>    newfile1:<input type="file" name="newfile[][]"/><br/>    newfile2:<input type="file" name="newfile[s]"/><br/>    singlefile: <input type="file" name="singlefile"/><br/>        <input type="submit" value="submit"/>    </form></body></html>

一共有9个 file 控件,其中 myfile 和 newfile 都是数组类型的表单名,而 singlefile 则是一个单独的。先简单的看一下 $_FILES 所获得的内容。

print_r($_FILES);Array(    [myfile] => Array        (            [name] => Array                (                    [0] => 2591d8b3eee018a0a84f671933ab6c74.png                    [a] => Array                        (                            [0] => 12711584942474_.pic_hd 1.jpg                            [b] => Array                                (                                    [0] => 12721584942474_.pic_hd 1.jpg                                )                        )                    [c] => Array                        (                            [0] => 12731584942474_.pic_hd.jpg                        )                    [1] => background1.jpg                    [2] => Array                        (                            [0] => adliu_pip_data.xlsx                        )                )            [type] => Array                (                    [0] => image/png                    [a] => Array                        (                            [0] => image/jpeg                            [b] => Array                                (                                    [0] => image/jpeg                                )                        )                    [c] => Array                        (                            [0] => image/jpeg                        )                    [1] => image/jpeg                    [2] => Array                        (                            [0] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                        )                )            [tmp_name] => Array                (                    [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phphD88ZY                    [a] => Array                        (                            [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpNY8MzY                            [b] => Array                                (                                    [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php3MX5tk                                )                        )                    [c] => Array                        (                            [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpjgrHMj                        )                    [1] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phppXRtnc                    [2] => Array                        (                            [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpekSY1M                        )                )            [error] => Array                (                    [0] => 0                    [a] => Array                        (                            [0] => 0                            [b] => Array                                (                                    [0] => 0                                )                        )                    [c] => Array                        (                            [0] => 0                        )                    [1] => 0                    [2] => Array                        (                            [0] => 0                        )                )            [size] => Array                (                    [0] => 4973                    [a] => Array                        (                            [0] => 3007                            [b] => Array                                (                                    [0] => 1156                                )                        )                    [c] => Array                        (                            [0] => 6068                        )                    [1] => 393194                    [2] => Array                        (                            [0] => 36714                        )                )        )    [newfile] => Array        (            [name] => Array                (                    [0] => Array                        (                            [0] => 数据列表 (2).xlsx                        )                    [s] => background1.jpg                )            [type] => Array                (                    [0] => Array                        (                            [0] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                        )                    [s] => image/jpeg                )            [tmp_name] => Array                (                    [0] => Array                        (                            [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phplSsRfM                        )                    [s] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpuQAvRb                )            [error] => Array                (                    [0] => Array                        (                            [0] => 0                        )                    [s] => 0                )            [size] => Array                (                    [0] => Array                        (                            [0] => 77032                        )                    [s] => 393194                )        )    [singlefile] => Array        (            [name] => timg (8).jpeg            [type] => image/jpeg            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpxtSQ4J            [error] => 0            [size] => 10273        ))

看出有什么问题了吗?

$_FILE['singlefile']['name'];$_FILE['singlefile']['type'];$_FILE['singlefile']['tmp_name'];$_FILE['singlefile']['error'];$_FILE['singlefile']['error'];$_FILE['myfile']['name']['a']['b'][0];$_FILE['myfile']['type']['a']['b'][0];$_FILE['myfile']['tmp_name']['a']['b'][0];$_FILE['myfile']['error']['a']['b'][0];$_FILE['myfile']['error']['a']['b'][0];

单个表单是一个 singlefile 为键名的数组,里面是对应的 name 、 type 等属性。这个非常简单也清晰明了,但是数组形式上传的内容就比较坑了,每一个属性下面都有多个值,而且这些值还有可能是嵌套的数组。

就比如说我们要获得 myfile[a][b][] 的上传文件内容,我们就要通过 \$_FILE[‘myfile’][‘name’][‘a’][‘b’][0] 、 $_FILE[‘myfile’][‘type’][‘a’][‘b’][0] 这样的形式获得相关的内容。

这个可真的不是很友好,那么我们今天的主题就来了,我们把这种内容进行一下格式化,让他变成和 singlefile 类似的结构,也就是一个文件的相关内容都在一个键名结构下,比如 myfile[a][b][] 的内容就全部都在 $_FILE[‘myfile’][a][b][0]下面。

$files = [];// 开始数据格式化foreach ($_FILES as $uploadKey => $uploadFiles) {    // 需要将 $_FILES 中的五个字段都拿出来    $files[$uploadKey] = formatUploadFiles($uploadFiles['name'], $uploadFiles['type'], $uploadFiles['tmp_name'], $uploadFiles['error'], $uploadFiles['size']);}// 格式化上传文件数组function formatUploadFiles($fileNamesArray, $type, $tmp_name, $error, $size){    $tmpFiles = [];    // 文件名是否是数组,如果不是数组,就是单个文件上传    if (is_array($fileNamesArray)) {        // 数组形式上传        foreach ($fileNamesArray as $idx => $fileName) {            // 如果还是嵌套的数组,递归遍历接下来的内容            if (is_array($fileName)) {                $tmpFiles[$idx] = formatUploadFiles($fileName, $type[$idx] ?? [], $tmp_name[$idx] ?? [], $error[$idx] ?? [], $size[$idx] ?? []);            } else {                // 组合多维的格式化内容                $tmpFiles[$idx] = [                    'name' => $fileName,                    'type' => $type[$idx] ?? '',                    'tmp_name' => $tmp_name[$idx] ?? '',                    'error' => $error[$idx] ?? '',                    'size' => $size[$idx] ?? '',                ];            }        }    } else {        // 组合单个的内容        $tmpFiles = [            'name' => $fileName,            'type' => $type ?? '',            'tmp_name' => $tmp_name ?? '',            'error' => $error ?? '',            'size' => $size ?? '',        ];    }    return $tmpFiles;}print_r($files);

代码还是非常好理解的,就是通过一段递归来遍历整个 $_FILES 目录树,相当于一个深度遍历。当然,这样也会带来性能的下降,毕竟是需要进行循环+递归的遍历。不过好在大部分情况下我们上传的文件并不会那么的多。不过反过来说,如果不事先进行格式化,当你想获得所有的上传内容时,一样还是需要进行多层或者递归遍历的。

接下来我们看看格式化之后的输出:

Array(    [myfile] => Array        (            [0] => Array                (                    [name] => 2591d8b3eee018a0a84f671933ab6c74.png                    [type] => image/png                    [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpV7A2yC                    [error] => 0                    [size] => 4973                )            [a] => Array                (                    [0] => Array                        (                            [name] => 12711584942474_.pic_hd 1.jpg                            [type] => image/jpeg                            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php5q2d1Z                            [error] => 0                            [size] => 3007                        )                    [b] => Array                        (                            [0] => Array                                (                                    [name] => 12721584942474_.pic_hd 1.jpg                                    [type] => image/jpeg                                    [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpdvv8No                                    [error] => 0                                    [size] => 1156                                )                        )                )            [c] => Array                (                    [0] => Array                        (                            [name] => 12731584942474_.pic_hd.jpg                            [type] => image/jpeg                            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php9tfGmp                            [error] => 0                            [size] => 6068                        )                )            [1] => Array                (                    [name] => background1.jpg                    [type] => image/jpeg                    [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phplUVpzA                    [error] => 0                    [size] => 393194                )            [2] => Array                (                    [0] => Array                        (                            [name] => adliu_pip_data.xlsx                            [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpNRtiaC                            [error] => 0                            [size] => 36714                        )                )        )    [newfile] => Array        (            [0] => Array                (                    [0] => Array                        (                            [name] => 数据列表 (2).xlsx                            [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpBLG7aG                            [error] => 0                            [size] => 77032                        )                )            [s] => Array                (                    [name] => background1.jpg                    [type] => image/jpeg                    [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpjyqCFY                    [error] => 0                    [size] => 393194                )        )    [singlefile] => Array        (            [name] =>            [type] => image/jpeg            [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpuYJXiE            [error] => 0            [size] => 10273        ))

和上面原始的 $_FILES 相比是不是清晰明了的很多?这回我们如果需要 myfile[a][b][] 里面全部的内容时,就可以使用下面的方式方便的获取了:

re class="brush:php;toolbar:false;">$files['myfile']['a']['b'][0]['name'];$files['myfile']['a']['b'][0]['type'];$files['myfile']['a']['b'][0]['tmp_name'];$files['myfile']['a']['b'][0]['error'];$files['myfile']['a']['b'][0]['size'];

当然,这种需求在我们的日常工作中并不多见,这里也只是提供一个思路,将数据提前转化成我们需要的格式是一种非常好的习惯,能够让我们的后续操作变得非常简单。

以上是“PHP多文件上传实现格式化的方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP多文件上传实现格式化的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP多文件上传实现格式化的方法

这篇文章主要介绍PHP多文件上传实现格式化的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、面向对象编程:
2023-06-15

php多文件上传怎么实现

在PHP中实现多文件上传,可以通过使用HTML表单和PHP来处理上传的文件。以下是一个简单的示例代码:创建一个HTML表单用于上传文件:
php多文件上传怎么实现
2024-03-06

Servlet3.0实现文件上传的方法

Servlet 实现文件上传所谓文件上传就是将本地的文件发送到服务器中保存。例如我们向百度网盘中上传本地的资源或者我们将写好的博客上传到服务器等等就是典型的文件上传。Servlet 3.0上次完成文件下载功能使用的是 Servlet 2.5
2023-05-31

php实现多图上传的方法是什么

本篇内容介绍了“php实现多图上传的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现多图上传的方法:1、创建html代码并
2023-06-25

element-ui el-upload实现上传文件及简单的上传文件格式验证功能

前端上传文件后,后端接受文件进行处理后直接返回处理后的文件,前端直接再将文件下载下来,下面这篇文章主要给大家介绍了关于element-ui el-upload实现上传文件及简单的上传文件格式验证功能的相关资料,需要的朋友可以参考下
2022-11-16

Android实现上传文件功能的方法

本文所述为一个Android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传。实例中主要实现上传文件至Server的方法,允许Input、Output,不使用Cac
2022-06-06

PHP上传文件的使用方法

本篇内容介绍了“PHP上传文件的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP 4.0.3之后PHP又出了一个新函数move_
2023-06-17

jsp 实现上传文件的两种方法

在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发.........[@more@]在用Java开发企业器系统的使用,特别
2023-06-03

Java实现文件上传的方法总结

这篇文章主要为大家介绍了三种Java实现文件上传的方法,文中的示例代码讲解详细,对我们的学习或工作有一定的借鉴价值,感兴趣的可以了解一下
2023-05-15

Nodejs+express中间件实现文件上传的方法

小编给大家分享一下Nodejs+express中间件实现文件上传的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用nodejs做项目时需要用到文件上传的功能,
2023-06-14

Java实现文件上传的方法有哪些

这篇文章给大家分享的是有关Java实现文件上传的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一. uploadify:uploadify控件的scripts和styles在这里:图片上传JSP:<%@
2023-05-30

JDK1.7以上javaFTP上传删除文件的实现方法

实例如下:packagecom.itv.launcher.util; importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;
2023-05-30

java文件上传的实现方法是什么

Java文件上传的实现方法有多种,以下是其中几种常见的方法:1. 使用Servlet API:通过HttpServletRequest的getPart()方法获取上传的文件,然后使用InputStream将文件保存到服务器上的指定路径。示例
2023-09-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录