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