Warning: rmdir(..): Directory not empty

Quando si tenta di eliminare una cartella in PHP, può accadere che si verifica il seguente errore:
Warning: rmdir(..): Directory not empty
Non è possibile eliminare una directory con rmdir se non è vuota. Quindi si deve utilizzare una funzione più elaborata. L'ideale è usare una funzione ricorsiva che entra nella directory, quindi la svuota poi la cancella.

Snippet

Lo snippet seguente permetterà di eseguire una funzione per svuotare una directory dai file e sotto directory che contiene poi cancellarla.
Codice compatibile PHP 5 o superiore.

<?

function rmdir_recursiva($dir)
{
 //Elencare il contenuto di una directory in una tabella
 $dir_content = scandir($dir);
 //è una directory ?
 if($dir_content !== FALSE){
  //Per ogni elemento della directory
  foreach ($dir_content as $entry)
  {
   //non considerare i Symbol link sotto Unix
   if(!in_array($entry, array('.','..'))){
    //rilevare il path riguardo all'inizio
    $entry = $dir . '/' . $entry;
    //questo elemento non è una directory lo cancelliamo
    if(!is_dir($entry)){
     unlink($entry);
    }
    //questo elemento è una directory, ricominciamo la stessa procedura
    else{
     rmdir_recursiva($entry);
    }
   }
  }
 }
 //Abbiamo cancellato tutti gli elementi della directory, possiamo cancellarla adesso
 rmdir($dir);
}
?>

Esempio per cancellare una directory "mia_Cartella"

@rmdir_recursiva('mia_Cartella');

Nota di sicurezza

se questa funzione non riesce, ad esempio se non si dispone dei permessi per eliminare un file, verrà visualizzato un messaggio di errore sulla pagina web che può fornire informazioni all'utente sul contenuto delle directory. Questo è il motivo per cui è meglio far precedere la chiamata a questa funzione con una chiocciola (@), per non visualizzare i messaggi di errore.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Warning: rmdir(..): Directory not empty » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.