无法删除用PHP创建的目录或文件(a.k.a权限地狱)

时间:2012-05-18 22:41:52

标签: php permissions

以下是独家新闻:我需要能够使用PHP脚本创建文件夹,并将图像文件上传到这些文件夹。这是我的代码:

创建目录:

mkdir('[path]/images/foldername');  


上传图片:

if ($_FILES["file"]["error"] > 0 || $_FILES["file"]["type"] != "image/jpeg") // file must be valid and .jpg
{
    echo "Error: " . $_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 "Stored in: " . $_FILES["file"]["tmp_name"] . '<br />';

    if(file_exists($path ."/" . $_FILES["file"]["name"]))
    {
        echo $_FILES["file"]["name"] . " already exists. ";
    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"], $path ."/" . $_FILES["file"]["name"]);
        echo "Stored in: " . $path ."/" . $_FILES["file"]["name"];
    }
}

FTP编辑器会出现以下错误:

[L] DELE 20.jpg
[L] 550 Could not delete imagename.jpg: Permission denied

然后

[L] RMD foldername
[L] 550 Can't remove directory: Directory not empty

我尝试在FTP编辑器中更改权限,但出现此错误:

[L] SITE CHMOD 777 [路径] / foldername [L] 550无法更改[path] / foldername上的perms:不允许操作
我尝试使用SSH和Putty删除文件,但这也不起作用。

请帮助我!

3 个答案:

答案 0 :(得分:4)

移动上传的文件后,请尝试执行以下操作:

@chmod($path ."/" . $_FILES["file"]["name"], 0777);

或者其他什么。您可能希望将权限更改为更好的内容。

答案 1 :(得分:3)

看起来您的PHP安装以与FTP会话不同的用户身份运行。因此,您的php上传脚本可以创建您的ftp用户无法触摸的文件; - )。

基本上有三种方法可以解决这个问题:

  1. 编写一个删除要删除的文件的php脚本。使用unlink()。 Google还会为您提供一些递归实现。
  2. 更改文件的权限(使用chmod。请注意,您可以轻松地让人们或进程无法访问这些文件。不要在生产环境中执行此操作。)
  3. 确保您的ftp用户和您的php用户相同。您需要在目标计算机上拥有root权限,或者您需要在计算机上使用友好的管理员来进行相应的设置。

答案 2 :(得分:2)

您可以更改运行FTP服务器的用户帐户,以使用与PHP脚本相同的用户(可能是www-data或httpd)