我目前有这个上传脚本,可以完美地用于单个图像,但我希望只需添加一个for循环就可以允许同一个脚本处理多个文件。
<input type="file" size="20" name="filename">
这是当前的脚本,我只是无法获得我尝试工作的任何for循环。
<?php
$filename = @basename($_FILES['filename']['name']);
$tmp_filename = $_FILES['filename']['tmp_name'];
if (!@move_uploaded_file($tmp_filename , DESTINATION_FOLDER . $dest_filename)) {
$errors[] = "Could not upload file (6).";
break;
}
?>
答案 0 :(得分:1)
行。现在它已经缩减,要以标准的非HTML5方式上传多个文件,您必须提供多个文件输入。有两种方法可以解决这个问题。使用PHP的数组表示法,以便每个文件输入具有相同的名称,并在上载后转换为文件数据数组,或者为每个文件输入一个唯一的名称:
数组版本:
<input type="file" name="filedata[]" />
<input type="file" name="filedata[]" />
<input type="file" name="filedata[]" />
唯一名称版本:
<input type="file" name="filedata1" />
<input type="file" name="filedata2" />
<input type="file" name="filedata3" />
PHP将根据您使用的版本不同地构建$ _FILES数组。对于数组方面,你最终会得到
$_FILES['filedata'] = array(
'name' => array(
0 => 'name of first file',
1 => 'name of second file',
2 => 'name of third file',
),
'size' => array(0 => 'size of first file', 1 => 'size of second file', etc...
etc...
请注意,每个文件都在各个参数下获得自己的条目。如果您选择唯一的名称版本,最终会得到:
$_FILES['filedata1'] = array('name' => ..., 'size' => ... );
$_FILES['filedata2'] = array('name' => ..., 'size' => ... );
etc...
其中每个文件在$ _FILES中都有自己的专用条目。
无论你使用哪种方式,都会出现所有相同的文件数据,只是以不同的方式排列,这会影响你如何循环它。
答案 1 :(得分:1)
然而,Marc B.提供的方法是一个很好的解决方案(因为它也支持旧浏览器),自HTML5引入以来,有一种更有效的方法来解决这个问题。通过使用“multiple”标签(http://www.w3schools.com/tags/att_input_multiple.asp),让用户一次选择多个文件要快得多。唯一应该存在的是文件名中的[](将结果变成数组)。
HTML代码:
<input type='file' name='filedata[]' multiple/>
PHP:
if(isset($_FILES)) print_r($_FILES);
结果:
[filedata] => Array ( [name] => Array ( [0] => images.jpg [1] => logo-2013.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => /tmp/phpWGKNMX [1] => /tmp/phpfIHDpH ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 2521 [1] => 76585 ) )