网站多文件上传

时间:2012-05-29 20:01:12

标签: php html file-upload

嗨,我对网络开发很新,但有编码背景。我正在尝试为我正在创建的表单创建一个非常简单的多文件上传器但是我不能为我的生活让它工作。我按照我在网上找到的教程,这是我到目前为止所拥有的。我得到的是hmm echo ha

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文件更新到这个并且最初有一个回声,其中正确回显我的文件然而我现在无法获得实际上传我只想将文件添加到我设置的上传目录权限已经是777与filezilla,并希望保持文件的相同名称

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

非常感谢你们的帮助!

1 个答案:

答案 0 :(得分: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上找到一个)并将其链接到此页面上的评论。但是上面的内容,应该让你(至少)得到你想要的东西。