0

重複の可能性:
PHP でディレクトリとその内容全体 (ファイル + サブディレクトリ) を再帰的に削除するにはどうすればよいですか?

空でないディレクトリとサブディレクトリを再帰的に削除する必要があります。この問題を解決するのに役立つクラスや関数が見つかりません。

ご回答ありがとうございます。

4

3 に答える 3

22

公式ドキュメントの最初のコメントから。

http://php.net/manual/en/function.rmdir.php

<?php

 // When the directory is not empty:
 function rrmdir($dir) {
   if (is_dir($dir)) {
     $objects = scandir($dir);
     foreach ($objects as $object) {
       if ($object != "." && $object != "..") {
         if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
       }
     }
     reset($objects);
     rmdir($dir);
   }
 }

?>

rmdir を rrmdir に編集して、再帰関数を作成するという明らかな意図からタイプミスを修正しました。

于 2012-03-18T17:34:31.227 に答える
3

このような何かがそれを行う必要があります...

function removeDir($path) {

    // Normalise $path.
    $path = rtrim($path, '/') . '/';

    // Remove all child files and directories.
    $items = glob($path . '*');

    foreach($items as $item) {
        is_dir($item) ? removeDir($item) : unlink($item);
    }

    // Remove directory.
    rmdir($path);
}

removeDir('/path/to/dir');

これにより、すべての子ファイルとフォルダーが削除され、渡された最上位フォルダーが削除されます。

これは、提供されたパスがディレクトリであることをテストし、各削除が成功したことを確認するなどのエラーチェックで行うことができます。

于 2012-03-18T17:36:18.140 に答える
0

ディレクトリを再帰的に削除するには、次を使用します。

function rrmdir($path) {
    return is_file($path)? @unlink($path): array_map(__NAMESPACE__ . '\rrmdir',glob($path.'/*'))==@rmdir($path);
}

UNIXでのみテストされています。

于 2012-03-18T17:35:39.060 に答える