首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP上传:上传多个文件?

PHP上传:上传多个文件?
EN

Stack Overflow用户
提问于 2012-01-07 00:29:44
回答 5查看 9.9K关注 0票数 1

我目前正在成功上传单个文件,表单如下:

代码语言:javascript
复制
<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 

<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

并使用以下脚本:

代码语言:javascript
复制
<?php
error_reporting(E_ALL);



    if (($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";


        $moved = move_uploaded_file($_FILES["file"]["tmp_name"], "C:/inetpub/wwwroot/PHP_Ramp/upload/" . $_FILES["file"]["name"]);

        if ($moved) {
            echo "Move: Success <br/>";
        }
        else {
            echo "Move Failed <br/>";
        }


          echo "Stored in: " . "C:/inetpub/wwwroot/PHP_Ramp/upload/" . $_FILES["file"]["name"];
          }
        }

    else
      {
      echo "Invalid file";
      }
    ?>

我现在尝试允许用户从表单中选择三个不同的文件。我找到了一些指南,说明如何做类似的事情,但我不太能让它工作。

我修改了表单,如下所示(包括三个输入):

代码语言:javascript
复制
<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<input type="file" name="file" id="file" />
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

但是我不确定如何修改php来处理这三个文件。我知道我需要遍历_FILES,但是我尝试过的所有东西都不起作用。如有任何建议,我们将不胜感激。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-07 00:33:42

每个文件元素必须有一个唯一的名称,或者使用PHP的数组简写形式:

代码语言:javascript
复制
<input type="file" name="file1" />
<input type="file" name="file2" />

代码语言:javascript
复制
<input type="file" name="file[]" />
<input type="file" name="file[]" />

记住- name属性定义如何在服务器上标识该字段,如果多次使用相同的名称,则在解析提交的数据时,PHP将用最新的副本覆盖以前的副本。数组符号([])告诉PHP,您打算有多个同名的字段,并且它找到的每个副本都应该添加到一个数组中,而不是覆盖。

对于唯一名称版本,您将像处理单个文件一样处理每个版本。

对于数组版本,PHP的设计很愚蠢,需要稍有不同的处理。您最终得到一个$_FILES数组,它看起来像

代码语言:javascript
复制
$_FILES = array(
    'fieldname' => array(
         'name' => array(
             0 => 'first file',
             1 => 'second file',
             etc...
         )
    )
)
票数 7
EN

Stack Overflow用户

发布于 2012-01-07 00:32:50

你需要改变

代码语言:javascript
复制
<input name="file" />

代码语言:javascript
复制
<input name="file[]" />

使它们成为一个数组。

然后,在您的脚本中,将它们引用为:

代码语言:javascript
复制
$_FILES['file']['name'][0]; // first file
$_FILES['file']['name'][1]; // second file

注意:您可以将name替换为通常在单个文件上使用的任何其他文件属性(例如,大小、类型等)。

或者,您可以为它们指定不同的名称:

代码语言:javascript
复制
<input name="firstfile" />
<input name="secondfile" />

然后在你的脚本中:

代码语言:javascript
复制
$_FILES['firstfile']; // first file
$_FILES['secondfile']; // second file
票数 4
EN

Stack Overflow用户

发布于 2013-01-08 21:33:34

您可以在单个输入中选择多个文件,如下所示。

代码语言:javascript
复制
<input type="file" name="pic[]" id="pic" accept="image/*" multiple="multiple"/>

此输入框可通过按can键接受多个文件。现在您可以在php中访问它们,如下所示

代码语言:javascript
复制
$_FILES['file']['name'][0]; // first file
$_FILES['file']['name'][1]; // second file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8761066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档