2009-08-18 114 views
32

如果該文件夾包含任何文件rmdir()函數失敗。我可以循環瀏覽目錄中的所有文件,如下所示:PHP:最簡單的方法來刪除文件夾(包括其內容)

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

是否有任何方法可以一次全部刪除它?

回答

47

嘛,總是有

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

(如有)。

+8

符號鏈接目錄的內容位於PHP註釋但這不能在Windows服務器上運行。 – Raza 2013-12-10 10:34:43

+4

@KashifRaza:對。因此「可用」。 – chaos 2013-12-11 16:03:48

+0

在Windows上使用: system('rd/Q/S''。$ dir。'「'); – ddelrio1986 2014-06-23 14:31:01

2

按照this來源;

如果你想清理一個目錄或刪除它,並且你在windows上,請節省一些時間。

使用:

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

您可以使用其他DEL語法,或任何其他殼UTIL。 您可能必須允許該服務與桌面進行交互,因爲這是我當前的設置,我不會更改它來測試此設置。

否則,你可以找到一個替代方法here.

+0

這是一個壞主意,必須依賴於你的操作系統......這隻能在Windows上運行,並且會在Unix系統上失敗...... – patrick 2017-02-14 00:55:57

59

rrmdir() - 遞歸刪除目錄:

function rrmdir($dir) { 
    foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
    } rmdir($dir); 
} 
+9

我曾經使用這樣的功能刪除了我的整個項目,要小心! – gskema 2014-07-21 08:27:44

+2

@gskema,您的評論讓我大笑!我只能想象「ohhhh shhiiiiittttt」時刻。我希望你一切都回來! – silversunhunter 2015-04-22 16:21:14

+3

@silversunhunter其實,我沒有。當'unlink'刪除某些東西時,就意味着它。好的,它只是一個測試項目。每天的課程:使用遠程VCS – gskema 2015-04-22 16:46:55

1

試試這個:

 
exec('rm -rf '.$user_dir); 
+5

永遠不會!你必須esape $ user_dir!請添加escapeshellarg($ user_dir) – 2015-07-21 08:18:58

+0

你瘋了嗎? – BadHorsie 2015-10-15 15:52:36

+0

不安全和更糟糕:取決於您的操作系統...這將在Windows系統上失敗,例如... – patrick 2017-02-14 00:55:15

3
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); 
    } 
} 
1

此機能的研究刪除該目錄及其所有子目錄和文件:

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); 
    } 
} 
0

一個安全,良好的功能受到lprent 它可以防止意外刪除位於當前目錄

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); 
    } 
相關問題