PHP多个文件上传到服务器

时间:2011-09-23 18:34:28

标签: php forms

这是我在论坛上的第二个问题。我已经用尽了所有研究这个方法的途径。我有一个HTML表单,将用脚本处理。在这种形式下,用户可以选择上传最多10个图像....每个图像都有自己的输入字段,如...

<form action="upload.php" method="post" enctype="multipart/form-data">

<label for="file">Filename:</label>
<input type="file" name="file" id="file" />

<label for="file">Filename:</label>
<input type="file" name="file" id="file" />

<label for="file">Filename:</label>
<input type="file" name="file" id="file" />

<label for="file">Filename:</label>
<input type="file" name="file" id="file" />

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

php就是这个......

$client = $_POST['company'];
$date = date("mdy");
$clientFolder = $client . $date;

mkdir('../../../uploads/' . $clientFolder . '/', 0700);
$folderPath = '../../../uploads/' . $clientFolder . '/';



if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000))
  {
  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 />";

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

我可以正确上传一个文件,但不能超过一个。我用过这个教程。 http://www.w3schools.com/php/php_file_upload.asp

我需要循环使用这些吗?或者我需要唯一的名称和ID吗?任何帮助将不胜感激!我是php的新手......我不得不说..我喜欢它!到目前为止......

2 个答案:

答案 0 :(得分:1)

我没有浏览过您的完整代码,但如果您对不同的表单元素使用相同的名称,则会丢失除一个以外的所有值。

你可能想要使用一些例外:添加方括号将使PHP构建一个数组:

<label for="file">Filename:</label>
<input type="file" name="file[]">

<label for="file">Filename:</label>
<input type="file" name="file[]">

您可以使用var_dump()检查$_FILES的确切结构。

其次,id HTML属性应该包含唯一标识符。您的客户端脚本可能会出错。

答案 1 :(得分:0)

也许您想要以不同的方式命名输入(例如:file1,file2等),然后在PHP中,您可以执行以下操作:

$i = 1;
while(isset($_POST['file'.$i])){
    //do upload here
    $i++;
}

您只上传了1个文件的原因是您将输入命名为“file”(并且因为您没有循环输入)。改变它,它应该没问题。