PHPでディレクトリを削除する方法(空でない場合)


  1. rmdir関数を使用する方法:

    <?php
    $directory = 'path/to/directory';
    if (is_dir($directory)) {
       $files = array_diff(scandir($directory), array('.', '..'));
       foreach ($files as $file) {
           unlink("$directory/$file");
       }
       rmdir($directory);
       echo "ディレクトリを削除しました。";
    } else {
       echo "ディレクトリが存在しません。";
    }
    ?>

    この方法では、まずis_dir関数を使用してディレクトリが存在するかどうかを確認します。存在する場合は、scandir関数を使用してディレクトリ内のファイルとディレクトリのリストを取得し、...を除外します。その後、unlink関数を使用してディレクトリ内のすべてのファイルを削除し、最後にrmdir関数でディレクトリ自体を削除します。

  2. RecursiveIteratorIteratorを使用する方法:

    <?php
    function deleteDirectory($directory) {
       if (!is_dir($directory)) {
           echo "ディレクトリが存在しません。";
           return;
       }
       $iterator = new RecursiveIteratorIterator(
           new RecursiveDirectoryIterator($directory),
           RecursiveIteratorIterator::CHILD_FIRST
       );
       foreach ($iterator as $file) {
           if ($file->isDir()) {
               rmdir($file->getRealPath());
           } else {
               unlink($file->getRealPath());
           }
       }
       rmdir($directory);
       echo "ディレクトリを削除しました。";
    }
    $directory = 'path/to/directory';
    deleteDirectory($directory);
    ?>

    この方法では、再帰的なイテレーションを行うためにRecursiveIteratorIteratorクラスを使用します。ディレクトリ内のすべてのファイルとディレクトリを対象にし、isDirメソッドを使用して判定します。ファイルであればunlink関数を、ディレクトリであればrmdir関数を使用して削除します。最後に、元のディレクトリ自体をrmdir関数で削除します。

上記の方法を使用することで、PHPでディレクトリを削除することができます。ディレクトリが存在しない場合やアクセス権限の問題がある場合にはエラーメッセージが表示されます。適切なエラーハンドリングを行い、処理の安全性を確保してください。