zoukankan      html  css  js  c++  java
  • 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上传(单个)文件示例 

  • 相关阅读:
    List遍历时删除与迭代器(Iterator)解惑
    从一次“并发修改字段业务”引出多版本并发控制与InnoDB锁
    RocketMQ存储机制与确认重传机制
    Java中的锁
    jmeter在non-GUI模式下用法
    Java SPI机制简述
    深拷贝、浅拷贝与Cloneable接口
    Java中的小数运算与精度损失
    java中的枚举类
    SpringBoot是如何实现自动配置的
  • 原文地址:https://www.cnblogs.com/52php/p/5677779.html
Copyright © 2011-2022 走看看