无法删除使用 PHP 创建的目录或文件(也称为权限地狱)


Cannot delete directory or files created with PHP (a.k.a permissions hell)

这是独家新闻:我需要能够使用 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] 站点 CHMOD 777 [路径]/文件夹名称[L] 550 无法更改 [路径]/文件夹名称上的烫发:不允许操作我尝试将SSH与Putty一起使用来删除文件,但这也没有用。

请帮帮我!

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

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

什么的。您可能希望将权限更改为更好的权限。

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

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

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

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