【问题标题】:PHP mkdir failing without errorsPHP mkdir 失败且没有错误
【发布时间】:2013-03-26 01:22:44
【问题描述】:

我正在尝试在我家的本地网络上设置一个小型文件共享服务器,但上传器遇到了一些大问题。它似乎失败的步骤是目录创建步骤,但是,当我第一次发布此内容时,Apache 日志文件中没有错误,但事实证明这是滞后文件的权限问题的结果。

这是相关的日志条目。

[Mon Mar 25 18:43:05 2013] [error] [client 10.0.0.17] PHP Warning:  mkdir(): Permission denied in /server/upload_movie.php on line 10, referer: http://10.0.0.17/upload_movie.html

这让我很困惑,因为我已经跑了 sudo chmod 0777 /服务器/* 须藤 chmod 0777 /服务器 /server/ 是 rood 目录。

我的代码如下

<?php
echo "starting". "<br>";
$allowedExts = array("mp4", "mpg", "avi", "mkv");
$extension = end(explode(".", $_FILES["uplodedfile"]["name"]));
echo "filetype parsed". "<br>";
$path = "/downloads/movies/unsorted/";
echo "checking upload directory". "<br>";
if(!is_dir($path)){
    echo "upload directory not found, creating...";
    if (mkdir($path,0777,true))
        {
        echo "directory creation complete". "<br>";
        }
    else
        {
        echo "directory creation failed at ".$path."<br>";
        }
}
echo "checking file". "<br>";
if (false)
  {
  echo "filetype and size passed". "<br>";
  if ($_FILES["uplodedfile"]["error"] > 0)
    {
    header('Location:  upload_failure.php?file='.$_FILES["uplodedfile"]['name'].'&error='.$_FILES["uplodedfile"]["error"]);
    exit();
    }
  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("upload/" . $_FILES["uplodedfile"]["name"]))
      {
       echo $_FILES["file"]["name"] . " already exists on server. ". "<br>";
      }
    else
      {
      echo "creating perminant copy of file". "<br>";
      move_uploaded_file($_FILES["uplodedfile"]["tmp_name"],
      $path."/" . $_FILES["uplodedfile"]["name"]);
      echo "Stored in: " . "movie_uploads/" . $_FILES["file"]["name"]. "<br>";
      }
    }
    header('Location:  upload_success.php?type=movie');
    exit();
  }
else
  {
  echo "error:<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Name: " . $_FILES["file"]["name"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
  echo "extension: ".$extension;
  exit();
  // echo "Invalid file";
  }
?>

输出如下

starting
filetype parsed
checking upload directory
upload directory not found, creating...directory creation failed at /downloads/movies/unsorted/
checking file
error:
Type: 
Name: 
Size: 0 kB
Temp file: 
extension:

调用它的代码是

<form enctype="multipart/form-data" action="upload_movie.php" method="POST">
<input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>

我已经尝试了PHP mkdir: Permission denied problem 中的所有建议,并且我关闭了 selinux。我正在使用 fedora 17。服务器正在一个 ext4 分区上运行,该分区不包含其他任何内容。

按照 cmets 的建议,我试过了 $error = error_get_last();回声 $error['message']; 哪个叫 未定义索引:文件

【问题讨论】:

  • 你启用error_reporting了吗?应该有一条消息,除非您的 / 根目录是全局可写的。 (不,不要这样做!)
  • 添加这个以获取错误是什么,似乎是一种权限问题,任何方式尝试获取错误代码的代码:$error = error_get_last();回声 $error['message'];
  • mario 是正确的,你应该或应该说必须检查你的目录的权限。
  • 错误报告已启用
  • 你确定当前工作目录有正确的权限了吗? (读、写、执行(777))

标签: php upload mkdir


【解决方案1】:

您似乎已为 /server 目录设置了正确的权限。但是您的服务器想要写入 /downloads- 目录。您应该使用以下命令启动并运行:

Sudo chmod 777 /download

【讨论】:

    【解决方案2】:

    您的错误信息说明了其中的所有内容。这是文件写权限问题。如果您想在 /downloads/movies/unsorted/ 中写入文件,则需要为所有目录设置写入权限(777)。但是您是说,您已经检查了下载目录的权限,但您可能没有设置重复目录的权限。所以在上传文件之前尝试下面的命令。

    Sudo chmod -R 777 /download
    

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多