使用HTML5和PHP上传多个文件

4

我已经使用HTML5的multiple属性设置了一个文件上传表单。

然而,该表单仍然只能上传单个文件。我需要在PHP中创建某种循环函数吗?还是有其他方法可以做到这一点?

以下是我的代码...

表单:

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">        
       <input type="file" multiple="multiple" name="file[]" id="file" />
       <input name="submit" type="submit" value="Submit" />    
</form>

php:

<?php
if(isset($_POST['submit'])) {           
foreach($_FILES['newsImage'] as $file){ 
if ((($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {


    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
}
}
?>

请发布您的表单代码。它应该包含多部分规范。 - Kris
2
你的代码似乎只处理了一个文件 - 你确定问题出在上传方面吗? - Pekka
值得注意的是,IE(我想还有Opera)不支持通过<input type="file" />元素选择多个文件。 - Christofer Eliasson
4个回答

3

我相信您的领域应该是:

<input type="file" multiple="multiple" name="files[]" />

然后在PHP中:

<?php
   foreach($_FILES['files'] as $file){
       // Handle one of the uploads
   }
?>

我根据你的回复修改了我的代码,但现在似乎没有上传任何东西...有什么想法吗...谢谢。 - Tom
在你的循环内部,你仍然在调用 $_FILES['file']['type'] 等等... 你应该调用 $file['type'](循环遍历你的文件数组中的特定文件)。 - Shai Mishali

3
for ($i = 0; $i < count($_FILES['newsImage']['name']); $i++) {
    // handle upload
}

为什么你接受了自己的答案,而我的答案是在两周之前回答的(而且是相同的解决方案...?)这似乎有点奇怪,我必须承认(: - Shai Mishali
1
由于使用多文件输入时文件数组的结构,foreach循环无法正常工作。您需要将每个文件信息部分定义为$_FILES['inputName']['name'][0]表示第一个文件名,$_FILES['inputName']['name'][1]表示第二个文件名,以此类推。 - Erik
虽然这是一篇旧帖子,但我也遇到了这个问题。确实,上传多个文件会使数组结构更加复杂,因此像这样使用常规的for循环确实有帮助。我相信有一种方法可以使用foreach,但这更简单。 - Martavis P.

2

我相信这段代码可以达到目的。它循环遍历 $_FILES 数组,并创建一个数组,其中包含每个文件的所有属性的键 => 值对。

$temp = array();
foreach ($_FILES['file'] as $key => $value) {
    foreach($value as $index => $val){
        $temp[$index][$key] = $val;
    }
}

-1
<?php   

    include 'db.php';

      extract($_POST);

        extract($_POST);
        if(isset($submit))
        {

          $count = count($_FILES['image']['name']);

           for($i=0;$i<$count;$i++)
           {
              $fname = $_FILES['image']['name'][$i];
              $file_tmp = $_FILES['image']['tmp_name'][$i];
              $file_size =  $_FILES['image']['size'][$i];
               $file_type=$_FILES['image']['type'][$i];
               echo $file_size,$file_type;         
               $target = "img/".$fname;
               move_uploaded_file($file_tmp,$target);
                echo "uploaded succ !"."<br>";

           }

        }

?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接