Warning: rmdir(..): Directory not empty

Dicembre 2016

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.

Potrebbe anche interessarti :
Il documento intitolato « Warning: rmdir(..): Directory not empty » da 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.