2009-08-18 11 views

Antwort

47

Nun, es gibt immer

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

wo verfügbar.

+8

Aber das wird nicht funktionieren auf Windows Server versehentlich zu löschen. – Raza

+4

@KashifRaza: Richtig. Daher "wo verfügbar". – chaos

+0

Unter Windows verwenden Sie folgendes: System ('rd/Q/S' '. $ Dir.' ''); – ddelrio1986

2

Gemäß this Quelle;

Sparen Sie etwas Zeit, wenn Sie ein Verzeichnis löschen oder löschen möchten und Sie auf Windows sind. Diese

Verwendung:

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

können Sie andere verwenden DEL Syntax oder andere Shell-util. Sie müssen möglicherweise zulassen, dass der Dienst mit dem Desktop interagieren, da dies meine aktuelle Einstellung ist, und ich ändere es nicht, um dies zu testen.

sonst könnten Sie eine alternative Methode here.

+0

es ist eine schlechte Idee, auf Ihr Betriebssystem angewiesen zu sein ... das funktioniert nur unter Windows und würde auf einem Unix-System zum Beispiel fehlschlagen ... – patrick

59

rrmdir() finden - rekursiv löschen Verzeichnisse:

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

Ich lösche einmal mein ganzes Projekt mit einer solchen Funktion, sei vorsichtig! – gskema

+2

@gskema, Dein Kommentar brachte mich zum Lachen !!! Ich kann mir nur den "ohhhh shhiiiiittttt" -Moment vorstellen. Ich hoffe, du hast es wiederbekommen! – silversunhunter

+3

@silversunhunter Eigentlich habe ich nicht. Wenn "unlink" löscht etwas, bedeutet es. Gut, dass es nur ein Testprojekt war. Lektion des Tages: Verwenden Sie eine Fernbedienung VCS – gskema

1

Try this:

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

nie! Du musst $ user_dir! bitte addieren escapeshellarg ($ user_dir) –

+0

Sind Sie verrückt? – BadHorsie

+0

unsicher und schlechter: hängt von Ihrem Betriebssystem ab ... das würde zum Beispiel auf einem Windows-System scheitern ... – patrick

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

Diese Funktionen erzeugt das Verzeichnis löschen und alle Unterverzeichnisse und Dateien:

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

Eine sichere und gute Funktion befindet sich in PHP Kommentare von lprent Es verhindert Inhalte von symbolischen Links Verzeichnissen in aktuellen Verzeichnis

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