0

嗨,我对 Web 开发很陌生,但有编码背景。我正在尝试为我正在创建的表单创建一个非常简单的多文件上传器,但是我一生都无法让它工作。我遵循了我在网上找到的教程,这是我到目前为止所拥有的。我得到了嗯回声哈

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr">
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
  <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" onChange="makeFileList();" />
<input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
</form>
    <p>
        <strong>Files You Selected:</strong>
    </p>
    <ul id="fileList"><li>No Files Selected</li></ul>

    <script type="text/javascript">
        function makeFileList() {
            var input = document.getElementById("filesToUpload");
            var ul = document.getElementById("fileList");
            while (ul.hasChildNodes()) {
                ul.removeChild(ul.firstChild);
            }
            for (var i = 0; i < input.files.length; i++) {
                var li = document.createElement("li");
                li.innerHTML = input.files[i].name;
                ul.appendChild(li);
            }
            if(!ul.hasChildNodes()) {
                var li = document.createElement("li");
                li.innerHTML = 'No Files Selected';
                ul.appendChild(li);
            }
        }
    </script>
</body>
</html>

PHP

<?PHP
if(count($_FILES['uploads']['filesToUpload'])) {
  foreach ($_FILES['uploads']['filesToUpload'] as $file) {
    move_uploaded_file($file, "uploads/" . "sample.png" );
  }
}else{
echo "hmm";
}
?>

编辑

好的,我将 php 文件更新为此,最初有一个回显,其中正确回显了我的文件但是我无法进行实际上传,现在我只想将文件添加到我已经设置权限的上传目录使用 filezilla 为 777 并希望保持文件的相同名称

<?PHP
if(count($_FILES['filesToUpload']['name'])) {
  foreach ($_FILES['filesToUpload']['name'] as $file) {
    move_uploaded_file($file, "uploads/" . $file );
  }
}else{
}
?>

非常感谢您迄今为止的帮助!

4

1 回答 1

3

你的代码

    count($_FILES['uploads']['filesToUpload'])

将始终返回零,因为该元素实际上并不存在于 $_FILES 数组中。

如果发生错误(仅在测试中),“print_r()”您的 $_FILES 数组可能会更有帮助。这是多文件上传语法的示例。

    Array
    (
        [filesToUpload] => Array
            (
                [name] => Array
                    (
                        [0] => test.txt
                        [1] => test - Copy.txt
                    )

                [type] => Array
                    (
                        [0] => text/plain
                        [1] => text/plain
                    )

                [tmp_name] => Array
                    (
                        [0] => C:\xampp\tmp\php3770.tmp
                        [1] => C:\xampp\tmp\php3771.tmp
                    )

                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )

                [size] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )

            )

    )

使用 count($_FILES['filesToUpload']['name']) 应该是您脚本的修复方法。

编辑

使用您的代码

    if(count($_FILES['filesToUpload']['name'])) {
      foreach ($_FILES['filesToUpload']['name'] as $file) {
        move_uploaded_file($file, "uploads/" . $file );
      }
    }

您正在发送名称(['name'](这是一个数组元素)作为 $file),它不会翻译,因为 move_uploaded_file() 正在寻找上传文件的 tmpname(或文件路径)。你可以改变你所拥有的。

    if(count($_FILES['filesToUpload']['name'])) {
      foreach ($_FILES['filesToUpload']['tmp_name'] as $ref => $fullfilename) {
        move_uploaded_file($fullfilename, "uploads/" . $_FILES['filesToUpload']['name'][$ref] );
      }
    }

这会让你进入球场,但我不得不提到,有更好的方法来处理这个问题。我将尝试发布一个用于多文件上传的课程(或在 Google 上找到一个)并将其链接到此页面上的评论。但是上面的内容应该(至少)让你得到你想要的东西。

于 2012-05-29T20:22:46.800 回答