PHP:没有ajax的多个文件上传

时间:2010-12-31 13:20:08

标签: php file-upload postback

我想要任何可以向我演示如何在PHP中上传多个文件的php脚本。在我的应用程序中,我给了一个链接“添加图像”& “删除图片”,点击“添加图片”我在页面上使用javascript添加一个新的上传字段,使用哪个用户可以上传越来越多的图片,暂时不限制图片数量。点击删除我删除该元素。

我只是没有得到如何在PHP的POST请求中处理它们的概念。我知道在HTML中,如果我们给出像myimages[]这样的字段的名称,那么它将创建一个PHP数组,但是如何处理它。

我不想使用AJAX / JavaScript进行上传,希望在PHP中使用传统的POST请求。

如果有人有任何显示此类功能的链接或代码,那么请求提供它将非常有用。

谢谢!

4 个答案:

答案 0 :(得分:3)

结合uploading multiple files& move_uploaded_file

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Send these files:<br />
  <input name="userfile[]" type="file" /><br />
  <input name="userfile[]" type="file" /><br />
  <input type="submit" value="Send files" />
</form>

$uploads_dir = '/uploads';
foreach ($_FILES["userfile"]["error"] as $key => $error) 
{
    if ($error == UPLOAD_ERR_OK) 
    {
        $tmp_name = $_FILES["userfile"]["tmp_name"][$key];
        $name = $_FILES["userfile"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

答案 1 :(得分:2)

上传的文件不在POST数组中,它们位于FILES数组中。 http://www.php.net/manual/en/features.file-upload.multiple.php

将文件上传到具有“安全”名称的临时区域。该数组将包含文件名和tmp文件。然后,您可以将它们移动到您想要的位置。

答案 2 :(得分:1)

在HTML中将文件输入字段命名为file [],然后在PHP中运行一个从0开始计数($ _ FILES)的循环...

for($i = 0; $i < count($_FILES['file']['tmp_name']); $i++){
    $tmp = $_FILES['file']['tmp_name'][$i];
    $name = md5(microtime());

 if(move_uploaded_file($tmp, "dir/$name.jpg")){
    echo "File '$tmp' uploaded successfully";
 }else{
    echo "Uploading '$tmp' failed";
 }
}

答案 3 :(得分:1)

我在过去实现了类似的东西:

  1. 有一个隐藏的JavaScript表单变量(例如:“numuploads”),用于存储当前表单中的文件输入数。当您在前端添加/删除输入时,需要递增/递减。

  2. 使用诸如“upload_X”之类的模式为前端的每个输入命名,其中X是序列中的下一个。 (实际上与-1以上的计数器相同。)

  3. 在PHP登录页面上,只需扫描$_FILES superglobal,查找每个“upload_X”,其中X为零至numuploads - 1.

  4. 然后,您可以为每个上传的文件,其他表单元素等执行所需的逻辑。