web-dev-qa-db-ja.com

PHP:フォルダ(その内容を含む)を削除する最も簡単な方法

フォルダーにファイルが含まれている場合、rmdir()関数は失敗します。次のようなもので、ディレクトリ内のすべてのファイルをループできます。

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);

一度にすべて削除する方法はありますか?

32
Chris B

ええと、常にあります

system('/bin/rm -rf ' . escapeshellarg($dir));

利用可能な場合。

47
chaos

rrmdir()-ディレクトリを再帰的に削除します:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
61
Yuriy
function delete_files($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           delete_files($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
 }
3
Gaurang P

this による;

ディレクトリをクリーンアップまたは削除する場合は、時間を節約してください。

これを使って:

    chdir ($file_system_path);
    exec ("del *.* /s /q");

他のDEL構文、または他のシェルユーティリティを使用できます。これは私の現在の設定であり、これをテストするために変更することはないため、サービスがデスクトップと対話できるようにする必要がある場合があります。

それ以外の場合は、別の方法を見つけることができます こちら

2
Kevin Boyd

この機能により、ディレクトリとすべてのサブディレクトリおよびファイルが削除されます。

function DelDir($target) {
    if(is_dir($target)) {
        $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

        foreach( $files as $file )
        {
            DelDir( $file );      
        }

        rmdir( $target );
    } elseif(is_file($target)) {
        unlink( $target );  
    }
}
1
vinsa

これを試して :

 exec( 'rm -rf'。$ user_dir); 
1
Ravinder Singh

Lprentによるphpのコメントにある安全で優れた機能の1つ。現在のディレクトリにあるシンボリックリンクディレクトリのコンテンツを誤って削除するのを防ぎます。

public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
0
AMIB