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.
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');
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.