【问题标题】:Upload Multiple Files HTML5 / PHP上传多个文件 HTML5 / PHP
【发布时间】:2016-11-12 20:49:46
【问题描述】:

我正在尝试构建一个基本的上传表单以将多个文件添加到一个文件夹,该文件夹由 PHP 处理。

我的 HTML 代码是:

<form id="form" action="add-files-php.php" method="POST" enctype="multipart/form-data">
    <div class="addSection">Files To Add:<br><input type="file" name="files[]" multiple /></div>
    <div class="addSection"><input type="submit" name="submit" value="Add Files" /></div>
</form>

而要处理的 PHP 是:

$file_path = "../a/files/article-files/$year/$month/";
foreach ($_FILES['files']['files'] as $file) {    
    move_uploaded_file($_FILES["file"]["name"],"$file_path");
}

我可以运行 PHP 而不会出现任何错误,但文件不会添加到路径文件夹中。

我哪里错了?

【问题讨论】:

    标签: php html file-upload


    【解决方案1】:

    我的一个项目中实际上有一个类似的代码。试试看。

    foreach ($_FILES['files']['name'] as $f => $name) {
        move_uploaded_file($_FILES["files"]["tmp_name"][$f], $file_path);
    }
    

    查看以下页面: http://php.net/manual/en/function.move-uploaded-file.php

    编辑: 在您提供的代码中没有任何地方表明您实际上为文件提供了文件名,您只是引用路径,而不是路径+文件名+扩展名

    move_uploaded_file($_FILES["files"]["tmp_name"][$f], $file_path . $name);
    

    将我的原始代码示例修改为像第二个一样,应该可以。

    【讨论】:

    • 谢谢。实际上,我只是在w3bees.com/2013/02/multiple-file-upload-with-php.html 上查看了一个非常相似的代码,但不幸的是,您给我的代码仍然没有上传文件。 $name 在您的示例中与什么相关?
    • 在我的示例中使用了 $name,以在生成错误消息时引用文件......但是,我从示例中删除了它。重要的是:
    • 输入的名称,与 $_FILES[] 中使用的名称相同
    • 对所有这些 cmets 感到抱歉。例如,尝试使用 print_r 打印出变量 $_FILES["files"] 看看会发生什么
    • 如我所见,看看您的示例...缺少的实际上是您在文件路径中为文件指定文件名的部分...基本上您将文件移动到没有文件名的路径。 move_uploaded_file($_FILES["files"]["tmp_name"][$f], $file_path . $name);
    【解决方案2】:

    迭代$_FILES['files']['error']数组并检查文件是否真的上传到服务器:

    $dest_dir = "../a/files/article-files/$year/$month";
    foreach ($_FILES["files"]["error"] as $key => $error) {
      if ($error == UPLOAD_ERR_OK) {
        // The temporary filename of the file stored on the server
        $tmp_name = $_FILES["files"]["tmp_name"][$key];
        $name = basename($_FILES["files"]["name"][$key]);
        // Handle possible failure of the move_uploaded_file() function, too!
        if (! move_uploaded_file($tmp_name, "$dest_dir/$name")) {
          trigger_error("Failed to move $tmp_name to $dest_dir/$name",
            E_USER_WARNING);
        }
      } else {
        // Handle upload error
        trigger_error("Upload failed, key: $key, error: $error",
          E_USER_WARNING);
      }
    }
    

    您的代码最大的问题是您试图移动$_FILES['files']['name'] 而不是$_FILES['files']['tmp_name']。后者是上传到temporary directory的临时文件的文件名,文件上传时用于存储文件。

    附言

    使用相对路径容易出错。考虑在项目根目录的常量包含路径的帮助下使用绝对路径,例如:

    config.php

    <?php
    define('MY_PROJECT_ROOT', __DIR__);
    

    上传.php

    <?php
    require_once '../some/path/to/project/root/config.php';
    
    $dest_dir = MY_PROJECT_ROOT . "/a/files/article-files/$year/$month";
    

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2011-10-31
      • 2011-08-05
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多