Удалить файлы, затем каталог - PullRequest
2 голосов
/ 10 августа 2010

Пока у меня есть это:

<?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 ]

2 голосов
/ 10 августа 2010

Вам нужно вытащить 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 голосов
/ 10 августа 2010

Вы пытаетесь удалить свой каталог в цикле foreach, который удалит файлы внутри этого каталога.

Я бы сначала попытался удалить все файлы, а затем удалить каталог, иначе он не будетбыть пустым и не может быть удален.

Кроме того, $ i-counter не будет сообщать вам, когда каталог пуст: представьте, что ваш первый файл будет удален, затем $ i = -1,Если теперь ваш второй файл не удален, ваш $ i = 0 ... что является условием для удаления каталога, даже если он не пустой, потому что, по крайней мере, ваш второй файл остается.

1 голос
/ 10 августа 2010

Возможные разрешения.

Поскольку вы удаляете только определенные типы файлов, в каталоге могут оставаться другие файлы, для которых у вас нет прав на удаление, поэтому вы не можете удалить папку.

Попробуйте проверить, если папка пуста, прежде чем пытаться rmdir команду на нее.

1 голос
/ 10 августа 2010

rmdir удаляет каталог, но только если он пуст. Вы должны удалить каждый файл (и каждый подкаталог с их файлами), прежде чем можно будет удалить каталог.

...