2

私はこれまでのところこれを持っています:

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

4 に答える 4

2

foreach-loop内のディレクトリを削除しようとしています。これにより、そのディレクトリ内のファイルが削除されます。

最初にすべてのファイルを削除してからディレクトリを削除してみます。そうしないと、空にならず、削除できません。

また、$ i-counterは、ディレクトリが空であるかどうかを通知する役割を果たしません。最初のファイルが削除され、次に$ i=-1になると想像してください。2番目のファイルが削除されていない場合、$ i = 0 ...これは、少なくとも2番目のファイルが残っているためにディレクトリが空でなくても、ディレクトリを削除するための条件です。

于 2010-08-10T14:47:25.560 に答える
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";
}
于 2010-08-10T14:49:43.357 に答える
1

rmdirはディレクトリを削除しますが、それが空の場合に限ります。ディレクトリを削除する前に、各ファイル(および各サブディレクトリとそのファイル)を削除する必要があります。

于 2010-08-10T14:46:23.563 に答える
1

おそらく許可。

特定のファイルタイプのみを削除するため、削除する権限がない他のファイルがディレクトリに残っている可能性があるため、フォルダを削除することはできません。

コマンドを実行する前に、フォルダが空かどうかを確認してくださいrmdir

于 2010-08-10T14:48:31.860 に答える