为多个文件上传添加For循环


Adding For Loop for Multiple File Upload

我目前有这个上传脚本,它完美地为单个图像工作,但我希望简单地添加一个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;
    }
?>

OK。现在它被压缩了,要以标准的非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中有自己的专用条目。

无论您使用哪个,所有相同的文件数据都存在,只是排列不同,这影响了您如何循环它。

但是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] =>数组([name] => Array([0] => images.jpg[1] => logo-2013.jpg)[type] =>数组([0] => image/jpeg[1] => image/jpeg)[tmp_name] => Array([0] =>/tmp/phpWGKNMX[1] =>/tmp/phpfIHDpH)[error] => Array([0] => 0[1] => 0)[size] =>数组([0] => 2521[1] => 76585))