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:\PHP\xampp2\tmp\phpF7E1.tmp
                    [1] => D:\PHP\xampp2\tmp\phpF7E2.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:\PHP\xampp2\tmp\phpF93A.tmp
                    [1] => D:\PHP\xampp2\tmp\phpF93B.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:\PHP\xampp2\tmp\php2247.tmp
            [error] => 0
            [size] => 98791
        )

    [upfile_2] => Array
        (
            [name] => JDK_API_1_6中文帮助.CHM
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\php2248.tmp
            [error] => 0
            [size] => 36830335
        )

    [upfile_3] => Array
        (
            [name] => jquery1.7.2中文手册.chm
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\php23B0.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:\PHP\xampp2\tmp\php4440.tmp
                    [1] => D:\PHP\xampp2\tmp\php4441.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:\PHP\xampp2\tmp\php459A.tmp
                    [1] => D:\PHP\xampp2\tmp\php459B.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:\PHP\xampp2\tmp\php459C.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:\PHP\xampp2\tmp\php4687.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:\PHP\xampp2\tmp\phpF27F.tmp
            [error] => 0
            [size] => 98791
        )

    [1] => Array
        (
            [key] => upfile
            [name] => JDK_API_1_6中文帮助.CHM
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\phpF280.tmp
            [error] => 0
            [size] => 36830335
        )

    [2] => Array
        (
            [key] => upfile_2
            [name] => jquery1.7.2中文手册.chm
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\phpF3C9.tmp
            [error] => 0
            [size] => 306357
        )

    [3] => Array
        (
            [key] => upfile_2
            [name] => jQuery1.8.3中文手册.chm
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\phpF3CA.tmp
            [error] => 0
            [size] => 405941
        )

    [4] => Array
        (
            [name] => php_manual_zh.chm
            [type] => application/octet-stream
            [tmp_name] => D:\PHP\xampp2\tmp\phpF3CB.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:\PHP\xampp2\tmp\phpF4C6.tmp
            [error] => 0
            [size] => 1304181
            [key] => upfile_4
        )

)

 

 

延伸阅读:

PHP上传(单个)文件示例 

posted @ 2016-07-17 08:33  52php  阅读(1096)  评论(0编辑  收藏  举报