繁体   English   中英

move_uploaded_files()不会错误地移动文件

[英]move_uploaded_files() doesn't move file without error

我正在尝试允许我的网站将文件上传到服务器。 到目前为止,这是我的代码:

form_upload.html

<html>
<body>

<form action="file_upload.php" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

file_upload.php

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } else {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
    if (file_exists("uploads/" . $_FILES["file"]["name"])) {
      echo $_FILES["file"]["name"] . " already exists. ";
    } else {
      if(!move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"])){
          echo "Did not store file.";
      }else{
          echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
      }
    }
  }
} else {
  echo "Invalid file";
}
?>

一切正常,但是当我在服务器上查看时,在/uploads文件夹中看不到该文件。 提交表单后,php文件将显示以下信息:

上传:square-big-button.jpg类型:image / jpeg大小:9.875 kB临时文件:/ tmp / phpyhjzZF存储于:uploads / square-big-button.jpg

当然, Temp file将始终是不同的。

到底是怎么回事? 为什么说它不是在上传时上传的?

解:

我只需要添加一个../uploads/作为目录。

尝试给出要保存的位置的正确路径。 还检查目录是否具有可写权限,如果您上载目录是我们的上一级../向上移动,依此类推

move_uploaded_file($_FILES["file"]["tmp_name"], "../uploads/" . $_FILES["file"]["name"]);

如果上载目录在您的服务器根目录下,请尝试

move_uploaded_file($_FILES["file"]["tmp_name"], "./uploads/" . $_FILES["file"]["name"]);

由于您说上传的文件位于根目录中,并且可以确定,因此应该可以。

move_uploaded_file($_FILES["file"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/uploads/" .   $_FILES["file"]["name"]);

刚刚在我的本地主机上对其进行了测试,它已将文件移至位于我的Web目录根目录的上载目录。

在这里工作正常,也许您将上载目录放置在错误的位置。 uploads目录应该与文件位于同一目录,或者您应该使用正确的相对路径作为../uploads。 您能告诉我们每个文件/文件夹的路径吗?

另外,这条线似乎是错误的。

if (file_exists("upload/" . $_FILES["file"]["name"])) {

它应该正在验证上载目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM