Php 删除文件,然后删除目录

Php 删除文件,然后删除目录,php,unlink,rmdir,delete-directory,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

到目前为止,我有:

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

?>


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

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

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

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


另外,$i-counter不会在目录为空时通知您:假设您的第一个文件将被删除,然后$i=-1。如果现在未删除第二个文件,则$i=0。。。这是删除目录的条件,即使它不是空的,因为至少还有第二个文件。

可能是权限。

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


尝试检查文件夹是否为空,然后再尝试对其执行
rmdir
命令。

您需要将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";
}
$numfailed=0;
foreach($files作为$file)
{
$delete=取消链接($file);
如果($删除)
{
echo$文件。“已删除!
”; } 其他的 { echo$文件。“无法删除…
”; $numfailed++; } } 如果($numfailed==0) { if(is_dir($path)) { $remove=rmdir($path); 如果($删除) { echo“目录已删除”
; } 其他的 { echo“无法删除目录
”; } } 其他的 { echo“不是有效的目录
”; } } 其他的 { echo“文件夹中仍有文件,无法删除$numfailed”; }
我知道这一点。我只允许该文件夹中有图像,所以每个文件都会被删除,但当文件夹中没有文件时,它不会删除目录…所以为什么不干脆
glob($path*)?删除
$i==0
检查:如果你删除所有内容,这是无用的。哦,是的,我注意到了,傻我。我现在更改了密码。仍然无法删除该目录+1如果($i==0),您的
仍然不会告诉您目录是否为空,请参阅上面的示例和使用“numfailed”的mvds代码,以查看文件是否无法删除。