【问题标题】:Adding For Loop for Multiple File Upload为多个文件上传添加 For 循环
【发布时间】:2011-07-27 21:35:45
【问题描述】:

我目前有这个上传脚本,它非常适合单个图像,但我希望简单地添加一个 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;
    }
?>

【问题讨论】:

  • 我们不会阅读这堵文字墙。将其归结为您想要的具有代表性的小样本。
  • @Marc B,对不起,我只是认为发布整个上传脚本就可以了。我想我可以在外部为每个正在上传的文件添加一个 for 循环。
  • 我们并不需要所有的定义/cmets。我们不需要数据库部分。基本上只有实际的 HTML 表单(并且只有与文件相关的字段)和上传处理部分。这应该最多需要 30 或 40 行。
  • 我试图将其压缩为我认为处理上传的 move_uploaded_file 部分。

标签: php html file upload


【解决方案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 数组。对于数组方面的事情,你最终会得到 ​​p>

$_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 中都有自己的专用条目。

无论你使用哪个,所有相同的文件数据都存在,只是排列方式不同,这会影响你循环它的方式。

【讨论】:

    【解决方案2】:

    然而,Marc B. 提供的方法是一个很好的解决方案(因为它也支持旧版浏览器),自从 HTML5 引入以来,有一种更有效的方法可以解决这个问题。通过使用“多个”标签 (http://www.w3schools.com/tags/att_input_multiple.asp),让用户一次选择多个文件要快得多。唯一应该仍然存在的是文件名中的 [](将结果放入数组中)。

    HTML 代码:

    &lt;input type='file' name='filedata[]' multiple/&gt;

    PHP:

    if(isset($_FILES)) print_r($_FILES);

    结果:

    [文件数据] => 数组
            (
                [名称] => 数组
                    (
                        [0] => 图像.jpg
                        [1] => logo-2013.jpg
                    )
                [类型] => 数组
                    (
                        [0] => 图像/JPEG
                        [1] => 图像/JPEG
                    )
                [tmp_name] => 数组
                    (
                        [0] => /tmp/phpWGKNMX
                        [1] => /tmp/phpfIHDpH
                    )
                [错误] => 数组
                    (
                        [0] => 0
                        [1] => 0
                    )
                [大小] => 数组
                    (
                        [0] => 2521
                        [1] => 76585
                    )
            ) 

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多