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

    延伸阅读:

    PHP上传(单个)文件示例 

  • 相关阅读:
    java插入语句中有单引号的处理
    mybatis批量插入
    用Resttemple从数据接口中取出数据
    java1.8Stream流式算法
    rabbitmq启动命令
    【MySQL】Mysql模糊查询like提速优化
    Mybatis基础知识点:trim标签的使用
    java8 array、list操作 汇【20】)- (FlatMap)用法汇总
    编写一个定制的收集器
    mysql
  • 原文地址:https://www.cnblogs.com/52php/p/5677779.html
Copyright © 2020-2023  润新知