文件上传无效

时间:2011-08-10 10:46:51

标签: php file-upload

我在一台媒体服务器上安装了wordpress,发现无法上传文件。在尝试之后,几个解决方案决定使用简单的脚本(http://pastie.org/2349720)来复制问题。

<?php
if($_FILES)
        print_r($_FILES);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000))
  {
  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 (!file_exists($_FILES["file"]["tmp_name"]))
      {
      echo 'temp file doesn\'t exists';
      }
    else
      {
      $uploaded=move_uploaded_file($_FILES["file"]["tmp_name"],
      $_FILES["file"]["name"]);
      if($uploaded)
        echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
      else
        echo "fallo la carga del archivo";
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

<html>
<body>

<form action="" 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>

看起来move_upload_file()返回false而没有警告或错误,在php文档中查找并发现了这个

  

如果filename不是有效的上传文件,则不会执行任何操作,并且   move_uploaded_file()将返回FALSE。

我已经检查过,文件上传没有报告任何错误,并且在尝试移动它之前存在临时文件。已经在文件夹中设置了777权限,但仍然没有任何运气,有什么可能导致此行为以及如何修复它的想法?

感谢。

7 个答案:

答案 0 :(得分:1)

这给你带来了什么:

$_FILES[...]['error']

如果它没有给你零,你可以检查这里出了什么问题:http://php.net/manual/en/features.file-upload.errors.php

如果是,请确保PHP可以访问您的文件夹所在的文件夹。您可以尝试运行此命令:

sudo -s -u [php_user]
cd [destination_directory]

检查您是否可以访问目录=)!

答案 1 :(得分:1)

如果目标不可写,

move_uploaded_file也将失败。根文件夹是否可写(我问这是因为你在移动它时没有将uploads文件夹添加到文件名中)。我知道你提到你将权限设置为777,但是是上传目录或应用程序所在的整个文件夹。

答案 2 :(得分:1)

您正在检查目标是否存在于某个目录中,然后将源复制到另一个目录:

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

答案 3 :(得分:0)

尝试move_uploaded_file()

目的地的绝对路径

答案 4 :(得分:0)

原来我禁用了fastCGI,我刚刚启用,并且事情按预期工作。谢谢你的帮助。

答案 5 :(得分:0)

检查你是否可以到达d dir,没有必要在临时文件夹中删除它,因为它会自动移动,目标目的地仍在d文件中。所以为什么不尝试将它移到另一个目的地

答案 6 :(得分:0)

我不知道这是否有帮助,但几小时前我发现了这个问题,问题是我的文件夹的写权限(我不拥有我正在处理的服务器)以及对我的响应与

合作
  

“yours”文件夹必须是用户apache运行的可写文件(www-data)这可以通过使文件夹世界可写或将“你要放置文件的位置”文件夹设置为组来实现www-data并使其成为可写组。