PHP – Eliminare una cartella non vuota sul server

Scritto da il 10 gen, 2010 in Programmazione | 0 commenti

Ecco uno script in PHP per eliminare una cartella sul server anche quando contiene dei files.
La funzione classica di PHP (rmdir) infatti, per funzionare, deve agire su di una cartella vuota.

La funzione esegue il parsing di qualunque file eliminadolo e infine rimuove la cartella sul server.

function EliminaCartella($dir){//passare il percorso relativo della cartella rispetto al file PHP in cui risiede la funzione
if ($handle = opendir($dir)){
$array = array();
while (false !== ($file = readdir($handle))){
if ($file != "." && $file != ".."){
if(is_dir($dir.$file)){
if(!@rmdir($dir.$file)){//Cartella Vuota perciò la rimuovo
EliminaCartella($dir.$file.'/');//Non Vuota perciò rimuovo prima i file al suo interno
}
} else {
@unlink($dir.$file);
}
}
}
closedir($handle);
@rmdir($dir);
}
}

Funzionamento

basta chiamare la funzione in questo modo:

EliminaCartella("cartella1/cartella2/");//verrà eliminata la "cartella2" e tutto il suo contenuto
function EliminaCartella($dir){
if ($handle = opendir($dir)){
$array = array();
while (false !== ($file = readdir($handle))){
if ($file != "." && $file != ".."){
if(is_dir($dir.$file)){
if(!@rmdir($dir.$file)){//Cartella Vuota perciò la rimuovo
EliminaCartella($dir.$file.'/');//Non Vuota perciò rimuovo prima i file al suo interno
}
} else {
@unlink($dir.$file);
}
}
}
closedir($handle);
@rmdir($dir);
}
}

IMPORTANTE: lasciare il carattere ‘/’ alla fine del parametro passato, altrimenti non funziona.
NOTA:
 io non ho inserito alcun controllo di errore (anteponendo il carattere “@” che sopprime gli errori delle funzioni) ma potete benissimo modificarla inserendo i “return” voluti. Potete anche inserire la funzione “chmod” per assicurarsi di avere i permessi di scrittura su ogni file o cartella (nel caso non li aveste e si verificassero errori).