删除文件然后删除目录

时间:2010-08-10 14:41:06

标签: php unlink rmdir delete-directory

到目前为止,我有这个:

<?php

$path = "files/";

$files = glob("" . $path . "{*.jpg, *.gif, *.png}", GLOB_BRACE);

$i = 0;

foreach($files as $file)
{
    $delete = unlink($file);

    if($delete)
    {
        echo $file . " deleted!<br />";
        $i - 1;
    }
    else
    {
        echo $file . " could not be deleted...<br />";
        $i + 1;
    }   
}

if($i == 0)
{   
    if(is_dir($path))
    {
        $remove = rmdir($path);

        if($remove)
        {
            echo "directory was deleted</br />";
        }
        else
        {
            echo "directory could not be deleted</br />";
        }
    }
    else
    {
        echo "not a valid directory<br />";
    }
}
else
{
    echo "there are some files in the folder";
    echo $i;
}

?>

删除每个文件,这很棒。但是,它不会删除目录。这有什么问题?

4 个答案:

答案 0 :(得分:2)

您正在尝试删除foreach循环中的目录,该目录将删除该目录中的文件。

我首先尝试删除所有文件然后删除目录,否则它将不为空且无法删除。

此外,$ i-counter将无法在目录为空时告诉您:想象您的第一个文件将被删除,然后$ i = -1。如果现在你的第二个文件没有删除,你的$ i = 0 ...这是删除目录的条件,即使它不是空的,因为至少你的第二个文件仍然存在。

答案 1 :(得分:2)

你需要将rmdir拉出循环。类似的东西:

$numfailed = 0;

foreach($files as $file)
{
    $delete = unlink($file);

    if($delete)
    {
        echo $file . " deleted!<br />";
    }
    else
    {
        echo $file . " could not be deleted...<br />";
        $numfailed++;
    }   
}

if($numfailed == 0)
{   
    if(is_dir($path))
    {
        $remove = rmdir($path);

        if($remove)
        {
            echo "directory was deleted</br />";
        }
        else
        {
            echo "directory could not be deleted</br />";
        }
    }
    else
    {
        echo "not a valid directory<br />";
    }
}
else
{
    echo "there are still files in the folder, failed to remove $numfailed";
}

答案 2 :(得分:1)

rmdir删除一个目录,但前提是它是空的。在删除目录之前,您必须删除每个文件(以及每个子目录及其文件)。

答案 3 :(得分:1)

可能是权限。

由于您只删除某些特定文件类型,目录中可能还有其他文件没有删除权限,因此您无法删除该文件夹。

在尝试使用rmdir命令之前,请尝试检查文件夹是否为空。