• 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>

    代码效果如下图:

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

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

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

    这里我们得到了图中的二维数组,如果我们想要进行多文件上传就需要通过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;
    
            }
    
        }
    
    }

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

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

    第二种方法:利用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>

    此段代码效果如下图:

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

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

     

    如图我们选择了三张图片,然后再用如下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;
    
            }
    
        }
    
    }

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

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

    那么本篇文章就先给大家介绍PHP使用multiple属性实现多文件上传的这两种简单方法,

  • 相关阅读:
    团队介绍及项目介绍
    2017年秋季个人阅读计划
    软件需求分析阅读笔记
    Cookie学习总结
    暑期兴趣班第二天学习总结
    暑期兴趣班第一天学习总结
    个人总结
    第十六周工作总结
    第十五周工作总结
    第十四周工作总结
  • 原文地址:https://www.cnblogs.com/furuihua/p/11152732.html
Copyright © 2020-2023  润新知