• PHP同时上传“多个”文件示例,并格式化$_FILES数组信息


    方法1:

    在html表单,放置多个文件选择框, 使用数组名作为组件的名字,如下:

    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile[]"/>
        <input type="file" name="upfile[]"/>
        <input type="file" name="upfile_2[]"/>
        <input type="file" name="upfile_2[]"/>
    </form>
    

     在服务器端我们可以测试一下提交的信息

    <?php
    print_r($_FILES);
    ?>
    

     输出结果:

    Array
    (
        [upfile] => Array
            (
                [name] => Array
                    (
                        [0] => C函数速查.chm
                        [1] => JDK_API_1_6中文帮助.CHM
                    )
     
                [type] => Array
                    (
                        [0] => application/octet-stream
                        [1] => application/octet-stream
                    )
     
                [tmp_name] => Array
                    (
                        [0] => D:PHPxampp2	mpphpF7E1.tmp
                        [1] => D:PHPxampp2	mpphpF7E2.tmp
                    )
     
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
     
                [size] => Array
                    (
                        [0] => 98791
                        [1] => 36830335
                    )
     
            )
     
        [upfile_2] => Array
            (
                [name] => Array
                    (
                        [0] => jquery1.7.2中文手册.chm
                        [1] => jQuery1.8.3中文手册.chm
                    )
     
                [type] => Array
                    (
                        [0] => application/octet-stream
                        [1] => application/octet-stream
                    )
     
                [tmp_name] => Array
                    (
                        [0] => D:PHPxampp2	mpphpF93A.tmp
                        [1] => D:PHPxampp2	mpphpF93B.tmp
                   )
    
     
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
     
                [size] => Array
                  (
                        [0] => 306357
                        [1] => 405941
                    )
     
            )
     
    )
    

    方法2:

    在html端为每一个input框给一个不同的name

    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile_1"/>
        <input type="file" name="upfile_2"/>
        <input type="file" name="upfile_3"/>
    </form>
    

     服务端“print_r($_FILES);” 后,输出的信息:

    Array
    (
        [upfile_1] => Array
            (
                [name] => C函数速查.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphp2247.tmp
                [error] => 0
                [size] => 98791
            )
     
        [upfile_2] => Array
            (
                [name] => JDK_API_1_6中文帮助.CHM
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphp2248.tmp
                [error] => 0
                [size] => 36830335
            )
     
        [upfile_3] => Array
            (
                [name] => jquery1.7.2中文手册.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphp23B0.tmp
                [error] => 0
                [size] => 306357
            )
     
    )
    

    所以,针对下面这个“综合性”上传表单:

    <form action="upload.php" method="post" enctype="multipart/form-data" >
        <input type="file" name="upfile[]"/>
        <input type="file" name="upfile[]"/>
        <input type="file" name="upfile_2[]"/>
        <input type="file" name="upfile_2[]"/>
        <input type="file" name="upfile_3"/>
        <input type="file" name="upfile_4"/>
    </form>
    

     服务端接收到的数据为:

    Array
    (
        [upfile] => Array
            (
                [name] => Array
                    (
                        [0] => C函数速查.chm
                        [1] => JDK_API_1_6中文帮助.CHM
                    )
     
                [type] => Array
                    (
                        [0] => application/octet-stream
                        [1] => application/octet-stream
                    )
     
                [tmp_name] => Array
                    (
                        [0] => D:PHPxampp2	mpphp4440.tmp
                        [1] => D:PHPxampp2	mpphp4441.tmp
                    )
     
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
     
                [size] => Array
                    (
                        [0] => 98791
                        [1] => 36830335
                    )
     
            )
     
        [upfile_2] => Array
            (
                [name] => Array
                    (
                        [0] => jquery1.7.2中文手册.chm
                        [1] => jQuery1.8.3中文手册.chm
                    )
     
                [type] => Array
                    (
                        [0] => application/octet-stream
                        [1] => application/octet-stream
                    )
     
                [tmp_name] => Array
                    (
                        [0] => D:PHPxampp2	mpphp459A.tmp
                        [1] => D:PHPxampp2	mpphp459B.tmp
                    )
    
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
     
                [size] => Array
                    (
                        [0] => 306357
                        [1] => 405941
                    )
     
            )
     
        [upfile_3] => Array
            (
                [name] => php_manual_zh.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphp459C.tmp
                [error] => 0
                [size] => 31019182
            )
     
        [upfile_4] => Array
            (
                [name] => TIPI深入理解PHP内核_2014-04-29_V0.8.3.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphp4687.tmp
                [error] => 0
                [size] => 1304181
            )
     
    )
    

     问题:上面的 $_FILES 信息有点乱,可以写个函数/方法来格式化下,参考代码如下:

    function format_files($files)
    {
        $fileArray = array();
        $n = 0;
        foreach ($files as $key => $file)
        {
            if (is_array($file['name']))
            {
                $keys = array_keys($file);
                $count = count($file['name']);
                for ($i = 0; $i < $count; $i++)
                {
                    $fileArray[$n]['key'] = $key;
                    foreach ($keys as $_key)
                    {
                        $fileArray[$n][$_key] = $file[$_key][$i];
                    }
                    $n++;
                }
            }
            else
            {
                $fileArray[$n] = $file;
                $fileArray[$n]['key'] = $key;
                $n++;
            }
        }
     
        return $fileArray;
    }
    

     经过 format_files($_FILES); 处理后,结果被格式化为:

    Array
    (
        [0] => Array
            (
                [key] => upfile
                [name] => C函数速查.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF27F.tmp
                [error] => 0
                [size] => 98791
            )
     
        [1] => Array
            (
                [key] => upfile
                [name] => JDK_API_1_6中文帮助.CHM
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF280.tmp
                [error] => 0
                [size] => 36830335
            )
     
        [2] => Array
            (
                [key] => upfile_2
                [name] => jquery1.7.2中文手册.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF3C9.tmp
                [error] => 0
                [size] => 306357
            )
     
        [3] => Array
            (
                [key] => upfile_2
                [name] => jQuery1.8.3中文手册.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF3CA.tmp
                [error] => 0
                [size] => 405941
            )
     
        [4] => Array
            (
                [name] => php_manual_zh.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF3CB.tmp
                [error] => 0
                [size] => 31019182
                [key] => upfile_3
            )
     
        [5] => Array
            (
                [name] => TIPI深入理解PHP内核_2014-04-29_V0.8.3.chm
                [type] => application/octet-stream
                [tmp_name] => D:PHPxampp2	mpphpF4C6.tmp
                [error] => 0
                [size] => 1304181
                [key] => upfile_4
            )
     
    )
     
    
  • 相关阅读:
    git配置config记住密码
    C#调用c++类的导出函数
    经典算法之直接插入排序
    经典算法之冒泡排序
    经典算法之二分查找
    shell实战之Linux主机系统监控
    shell高级特性-4
    shell实战之tomcat看门狗
    shell函数-3
    shell运算符与流程控制-2
  • 原文地址:https://www.cnblogs.com/qingsong/p/5003720.html
Copyright © 2020-2023  润新知