2009-08-18 12 views

risposta

47

Beh, c'è sempre

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

dove disponibile.

+8

Ma questo non funziona su server Windows. – Raza

+4

@KashifRaza: Giusto. Quindi "dove disponibile". – chaos

+0

Su Windows usare questo: sistema ('rd/Q/S "'. $ Dir. '"' '; – ddelrio1986

2

Come da sorgente this;

Risparmiate un po 'di tempo, se volete pulire una directory o cancellarla e siete su Windows.

Usa questa:

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

è possibile utilizzare altri sintassi DEL, o di qualsiasi altra shell util. Potrebbe essere necessario consentire al servizio di interagire con il desktop, poiché questa è la mia impostazione attuale e non la cambierò per testarlo.

Altrimenti si potrebbe trovare un metodo alternativo here.

+0

è una cattiva idea dover dipendere dal tuo sistema operativo ... questo funziona solo su Windows e fallirebbe su un sistema Unix per esempio ... – patrick

59

rrmdir() - ricorsivamente cancellare directory:

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

Una volta ho cancellato tutto il mio progetto usando tale funzione, fai attenzione! – gskema

+2

@gskema, il tuo commento mi ha fatto ridere !!! Posso solo immaginare il momento "ohhhh shhiiiiittttt". Spero che tu abbia recuperato tutto! – silversunhunter

+3

@silversunhunter In realtà, non l'ho fatto. Quando 'unlink' cancella qualcosa, significa. Meno male che era solo un progetto di prova. Lezione del giorno: utilizzare un VCS remoto – gskema

1

Prova questo:

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

mai e poi mai! devi esape $ user_dir! per favore aggiungi escapeshellarg ($ user_dir) –

+0

Sei pazzo? – BadHorsie

+0

non sicuro e peggio: dipende dal tuo sistema operativo ... questo fallirebbe su un sistema Windows, per esempio ... – 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

Questa fuction eliminare la directory e tutto sottodirectory e file:

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

Una funzione sicura e buona situato nei commenti php da lprent Impedisce accidentalmente cancellando contenuti dei link simbolici directory che si trovano nella directory corrente

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