HTML PHP 文件上传 :: 上传的文件没有出现在服务器上

HTML PHP File Upload :: Uploaded File Doesn't Appear On Server

我正在关注 this tutorial,试图建立一个用户可以上传文件的简单网站。我应该说我是 HTML 和 PHP.

的新手

所以我的网络服务器是 Apache2,运行 Ubuntu 16.04。在我服务器的 /var/www/html/ 目录中,我有:

me@myServer:/var/www/html$ ls -l
total 36
-rw-r--r-- 1 ph9821 ph9821 1032 Feb 18 12:23 index.html
-rwxr-xr-x 1 ph9821 ph9821  480 Feb 18 12:18 uploader.php
drwxr-xr-x 2 ph9821 ph9821 4096 Feb 18 12:16 uploads
me@myServer:/var/www/html$

我的测试网站非常无聊:

index.html描述了我的两个按钮,一个是从客户端机器上传文件:

<!DOCTYPE html>
<html>
<body>
    <h2>DIY HTML5 File Uploader</h2>
    <input type="file" name="file_to_upload" id="file_to_upload">
    <hr>
    <input type="button" value="Upload To Server" id="upload_file_button">

    <script>
        document.getElementById('file_to_upload').addEventListener('change', (event) => {
            window.selectedFile = event.target.files[0];
        });

        document.getElementById('upload_file_button').addEventListener('click', (event) => {
            uploadFile(window.selectedFile);
        });

        function uploadFile(file) {
            var formData = new FormData();
            formData.append('file_to_upload', file);
            var ajax = new XMLHttpRequest();
            ajax.open('POST', 'uploader.php');
            ajax.send(formData);
        }

    </script>

</body>
</html>

HTML 引用 uploader.php,即:

<?php

$file_name = $_FILES["file_to_upload"]["name"];
$file_temp_location = $_FILES["file_to_upload"]["tmp_name"];

if (!$file_temp_location) {
    echo "ERROR: No file has been selected";
    exit();
}

if(move_uploaded_file($file_temp_location, "/var/www/html/uploads/$file_name")){
    echo "$file_name upload is complete";
} else {
    echo "A server was unable to move the file";
}

?>

PHP 代码应将上传的文件保存在我的 uploads 目录中,如上所示。遗憾的是,当您单击“选择文件”时,select 客户端计算机上的一个文件,然后单击“上传到服务器”,该文件并没有出现在该目录中。事实上,它不会出现在任何地方。上传后,在使用 Unix find 命令时无法识别目标文件名。上传的文件根本没有保存在服务器上。

我遗漏了一些东西。我可以通读上面的代码,大致了解每一行在做什么。但我只是没有经验来发现我哪里出错了。谁能提供任何建议?谢谢。

尝试更改您的 move_uploaded_file() 目录并提供相对于 php 文件的路径


if(move_uploaded_file($file_temp_location, "uploads/$file_name")){
    echo "$file_name upload is complete";
}

这应该是您的索引页的 HTML。您不需要使用 JS 来处理文件上传:

<!DOCTYPE html>
<html>
    <body>
          <h2>DIY HTML5 File Uploader</h2>
          <form action="uploader.php" method="post" enctype="multipart/form-data">
                <input type="file" name="uploadFile" id="uploadFile">
                <hr>
                <input type="submit">
            </form>
    </body>
</html>

这应该是 uploader.php 的 PHP 代码:

<?php
$target_dir = "uploads/";
$filename = basename($_FILES["uploadFile"]["name"]);
$target_file = $target_dir . $filename;
if (move_uploaded_file($_FILES["uploadFile"]["tmp_name"], $target_dir . $filename)) {
  echo "The file ". $filename . " has been uploaded.";
} else {
  echo "Sorry, there was an error uploading your file.";
}
?>

此代码将您上传的文件保存在上传文件夹中。 如果您有任何答案或需要我解释代码,请询问。