【问题标题】:Delete files then directory删除文件然后目录
【发布时间】:2011-03-27 21:10:09
【问题描述】:

到目前为止我有这个:

<?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;
}

?>

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

【问题讨论】:

    标签: php unlink rmdir delete-directory


    【解决方案1】:

    您需要将 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】:

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

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

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

      【讨论】:

      • 哦,是的,我注意到了,我很傻。我现在更改了代码。仍然无法删除目录。 +1
      • 您的if($i == 0) 仍然不会告诉您您的目录是否为空,请参见我上面的示例和使用“numfailed”的 mvds 代码来查看文件是否无法删除。
      【解决方案3】:

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

      【讨论】:

      • 我知道。我只允许该文件夹中的图像,因此每个文件都会被删除,但是当文件夹中没有文件时它不会删除目录...
      • 那么为什么不直接glob("$path*");呢?并删除$i == 0 检查:如果您要删除所有内容,那将毫无用处。
      【解决方案4】:

      可能是权限。

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

      在尝试对其执行rmdir 命令之前,请尝试检查该文件夹是否为空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 2013-05-30
        • 2012-07-01
        • 1970-01-01
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多