PHP多文件上传如何实现格式化

本篇文章给大家介绍一下php多文件上传实现格式化的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

PHP多文件上传如何实现格式化

推荐:《2021年PHP面试题大汇总(收藏)》《php视频教程》

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

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

立即学习“PHP免费学习笔记(深入)”;

nbsp;html>            Document    

登录后复制

一共有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多文件上传如何实现格式化的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2516373.html

(0)
上一篇 2025年3月5日 15:52:13
下一篇 2025年2月19日 13:30:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • PHP中的数据库如何实现连接持久化

    本篇文章给大家介绍一下php中的数据库实现连接持久化的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 数据库的优化是我们做web开发的重中之重,甚至很多情况下其实我们是在面向数据库编程。当然,用户的一切操作、行为都是…

    2025年3月5日
    200
  • PHP的引用计数是什么意思?

    本篇文章给大家介绍一下php的引用计数。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 什么是引用计数 在PHP的数据结构中,引用计数就是指每一个变量,除了保存了它们的类型和值之外,还额外保存了两个内容,一个是当前这个变量…

    2025年3月5日
    200
  • PHP如何实现文章分类

    本篇文章给大家介绍一下用php实现文章分类的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 文章分类:同一个新闻 属于 多个菜单项 。比如某新闻既属于校园新闻又属于机构设置,那么点开校园新闻菜单项可以看到这篇文章,点…

    2025年3月5日
    200
  • php能清除文件内容吗

    php能清除文件内容,其实现方法是:首先创建一个PHP示例文件;然后通过“fopen($path, “r+”);”打开文件;最后通过“if( flock($fh, LOCK_EX) ){…}”方式清除文件…

    2025年3月5日
    200
  • php怎么删除字符中的斜线

    php删除字符中的斜线的方法:首先打开相应的PHP代码文件;然后通过“stripslashes($_POST[‘json’]);”去掉反斜杠;最后进行json_decode即可。 本文操作环境:windows7系统、…

    2025年3月5日
    200
  • php下载excel打不开了怎么办

    php下载excel打不开的解决办法:1、在下载的过程中不要输出任何非文件信息;2、输出的excel格式一定要和后缀名保存一致;3、检查文件是否下载完整即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php下…

    2025年3月5日
    200
  • php中的多态什么意思

    php中的多态按字面上意思理解就是“多种形状”,可以理解为多种表现形式,即“一个对外接口,多个内部实现方法”;在面向对象的理论中,多态性是指同一个操作作用于不同的类的实例,将产生不同的执行结果。 本文操作环境:windows7系统、PHP7…

    2025年3月5日
    200
  • php占位符不能用怎么办

    php占位符不能用是因为代码错误,其解决办法:首先打开相应的代码文件;然后将“placeholder “Your name here””修改为“placeholder=”Your name here&#8…

    2025年3月5日
    200
  • PHP怎么实现局部替换

    PHP实现局部替换的方法:1、通过“substr_replace”函数实现局部替换;2、通过自制的星号替换函数“replaceStar($str, $start, $length=0)”实现局部替换。 本文操作环境:windows7系统、P…

    2025年3月5日 编程技术
    200
  • php中产生随机数的两种方式

    在php中为了之制造一些偶然性,我们可能需要将一些变量的值设置为随机的,为了解决这一问题,php中内置了函数rand()、mt_rand()函数来解决这一问题。 首先我们来看一看mt_rand()函数的语法: mt_rand    ( in…

    2025年3月5日
    200

发表回复

登录后才能评论