• 技术文章 >每日编程 >PHP知识

    PHP实现多个文件上传的简单方法有哪些?(图文+视频)

    藏色散人藏色散人2019-11-08 17:57:18原创9203

    本篇文章将给大家介绍关于PHP实现多个文件上传的一些简单方法。

    在此知识内容介绍之前,我们在前面的文章【PHP文件上传方法详解及其信息解析】中已经为大家详细介绍了php实现单个文件上传的具体方法,那么这篇文章和今天要介绍的知识点是有关联的,需要的朋友可以先参考学习下。

    下面我们就通过具体的代码示例,为大家介绍PHP实现多文件上传的一些简单方法。

    第一种方法:利用单个文件上传方法

    一段简单的form表单代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
     选择文件进行上传: <input type="file" name="file1">
     选择文件进行上传: <input type="file" name="file2">
     选择文件进行上传: <input type="file" name="file3">
        <input type="submit" value="上传">
    </form>
    </body>
    </html>

    代码效果如下图:

    6315178f5774e246519fc7fb811fc24.png

    如图我们选择上传了三个文件,然后我们再将文件上传给upload.php文件中,PHP代码如下:

    <?php
    echo "<pre>";
    var_dump($_FILES);

    那么我们继续通过浏览器访问结果如下:

    481cbe293521e7b18970aed3d06c103.png

    这里我们得到了图中的二维数组,如果我们想要进行多文件上传就需要通过foreach循环来实现。

    那么upload.php完整代码如下:

    <?php
    echo "<pre>";
    var_dump($_FILES);
    $files = [];
    foreach ($_FILES as $fileInfo) {
        $files[] = upload_file($fileInfo);
    }
    var_dump($files);
    function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg'])
    {
        if ($fileInfo['error'] === 0) {
            $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
            if (!in_array($ext, $imagesExt)) {
                return "文件非法类型";
            }
            if (!is_dir($upload)) {
                mkdir($upload, 0777, true);
            }
            $fileName = md5(uniqid(microtime(true), true)) . "." . $ext;
            $destName = $upload . "/" . $fileName;
            if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) {
                return "文件上传失败!";
            }
            return "文件上传成功!";
        } else {
            switch ($fileInfo['error']) {
                case 1:
                    echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                    break;
                case 3:
                    echo '文件只有部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }
        }
    }

    最后我们选择多个文件上传,结果就如下图所示:

    e9397c6617294cb478a18615a50e563.png

    a96f860c4f69bffee199a75d5e43f64.png

    此时已经成功实现多个文件上传的操作了。

    第二种方法:利用HTML5中的multiple方法

    上传多文件的HTML界面的代码示例如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
     选择文件进行上传: <input type="file" name="file[]" multiple=""><br>
        <input type="submit" value="上传">
    </form>
    </body>
    </html>

    此段代码效果如下图:

    786ff10848b0ebc5f606475c8cf8937.png

    在这里的form表单中我们用到了HTML 5中的 multiple 属性,这个属性表示输入字段可选择多个值,也就是选择该属性时,此字段可以接受多个值。multiple是我们实现多文件上传的一个重要属性。同时我们将input中name名设置为一个file[] 数组。

    那么我们再选择多个文件上传,如下图:

    2ad580e231f850fef5880d324d99d5e.png

    6a2c560700adc0eeebccbf73e8dfe82.png

    如图我们选择了三张图片,然后再用如下upload.php文件来接收三个数据。

    upload.php代码示例如下:

    <?php
    echo "<pre>";
    var_dump($_FILES);
    $files = [];
    foreach ($_FILES as $fileInfo) {
        $files[] = upload_file($fileInfo);
    }
    var_dump($files);
    function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg'])
    {
        if ($fileInfo['error'] === 0) {
            $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
            if (!in_array($ext, $imagesExt)) {
                return "文件非法类型";
            }
            if (!is_dir($upload)) {
                mkdir($upload, 0777, true);
            }
            $fileName = md5(uniqid(microtime(true), true)) . "." . $ext;
            $destName = $upload . "/" . $fileName;
            if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) {
                return "文件上传失败!";
            }
            return "文件上传成功!";
        } else {
            switch ($fileInfo['error']) {
                case 1:
                    echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                    break;
                case 3:
                    echo '文件只有部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }
        }
    }

    此时上传三张文件后,通过浏览器访问,结果如下图:

    6edc422d8e38ef25f5ab0b163028920.png

    我们从图中可以看到,上传文件信息以三维数组形式展现,其中三个图片的名称、类型、临时存储的位置路径、大小等等信息都分别放在了一个数组中。

    然而我们可以发现upload.php这个文件中的信息解析方法对于用multiple属性上传来的文件并没有产生效果。

    那么本篇文章就先给大家介绍PHP使用multiple属性实现多文件上传的这两种简单方法,在后续的文章中我们会继续为大家详细介绍,PHP实现多文件上传及信息解析也就是第二种方法的详解!

    想要了解更多PHP相关知识,大家可以关注PHP中文网PHP视频教程。欢迎大家来参考学习!

    以上就是PHP实现多个文件上传的简单方法有哪些?(图文+视频)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:怎么解决PHP中嵌套函数被调用时出现报错的问题?(图文+视频) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP文件上传主要代码讲解_php基础• PHP文件上传类实例详解_php技巧• php文件上传的两种实现方法_php技巧• PHP文件上传之多文件上传的实现思路_php实例• PHP文件上传问题汇总(文件大小检测、大文件上传处理)_php技巧
    1/1

    PHP中文网