【问题标题】:PHP: multiple files upload without ajaxPHP:多个文件上传没有ajax
【发布时间】:2010-12-31 13:20:07
【问题描述】:

我想要任何可以演示如何在 PHP 中上传多个文件的 php 脚本。在我的应用程序中,我给出了一个链接“添加图像”和“删除图像”,点击“添加图像”我正在使用 javascript 在页面上添加一个新的上传字段,用户可以使用它上传越来越多的图像,没有限制关于现在的图像数量。单击删除时,我将删除该元素。

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

我不想使用 AJAX/JavaScript 进行上传,想用 PHP 中的传统 POST 请求来完成。

如果有人有任何显示此类功能的链接或代码,请提供它会非常有帮助。

谢谢!

【问题讨论】:

    标签: php file-upload postback


    【解决方案1】:

    结合uploading multiple filesmove_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");
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在 HTML 中将文件输入字段命名为 file[],然后在 PHP 中从 0 do count($_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";
         }
        }
        

        【讨论】:

          【解决方案4】:

          我在过去实现了类似的东西,如下所示:

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

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

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

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

          【讨论】:

          • 我看到了一个问题,假设用户添加了 u1、u2、u3,然后他删除了 u2,现在页面上有 u1 和 u3。你在 js/jquery 中有什么类似的脚本概念可以用来解决这个问题吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-04
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 2018-06-29
          • 1970-01-01
          • 2015-03-12
          相关资源
          最近更新 更多