Cancellare Directory in Php
Scritto da loigeSpesso si ha l’esigenza di cancellare una cartella salvata sul nostro server tramite uno script PHP. La prima soluzione che ci viene in mente è quella di utilizzare semplicemente il metodo rmdir() specificando come parametro il percorso alla cartella che vogliamo elimanare. Fatto ciò ci accorgiamo che il metodo rmdir() può cancellare solo cartelle vuote e che quindi dobbiamo prima svuotare del tutto la nostra cartella.
Ecco una funzione ricorsiva scritta ad hoc per risolvere il nostro problema
function deleteFilesAndFolder($folderName){
//crea un array che conterrà l’elenco di tutti i file che sono stati eliminati
$elenco=array();
//apre la cartella specificata come parametro
$cartella = opendir($folderName);
//ciclo che legge tutti i file della cartella
while ($file = readdir($cartella)) {
//se il file ha un nome diverso da ‘.’ o ‘..’
if($file !=‘.’ && $file !=‘..’){
//Verifica che si tratta di un file e non di una cartella
if(is_file($folderName.‘/’.$file)){
//aggiunge il file all’array
array_push($elenco,$folderName.‘/’.$file);
//elimina il file
unlink($folderName.‘/’.$file);
}
//se si tratta di una cartella
if(is_dir($folderName.‘/’.$file)){
//richiama ricorsivamente la stessa funzione aggiungendo i file
//della nuova funzione all’elenco creato inizialmente
$elenco = myMerge($elenco,deleteFilesAndFolder($folderName.‘/’.$file));
}
}
}
//Chiude la cartella
closedir($cartella);
//elimina la cartella
rmdir($folderName);
//aggiunge la cartella stessa all’elenco
array_push($elenco,$folderName);
//restituisce l’elenco di tutti i file eliminati
return $elenco;
}
Il metodo myMerge() è un metodo personalizzato che si occupa di unire due array:
function myMerge($array1,$array2){
foreach($array2 as $a){
array_push($array1,$a);
}
return $array1;
}
Ovviamente per poter cancellare files e cartelle dovrete prima assicurarvi di avere i permessi necessari per poter effettuare tale operazione. Inoltre è consigliabile assicurarsi, prima di eliminare la cartella, di commentare le righe con la chiamata ai metodi unlink() e rmdir() e fare una print_r() della nostra funzione, così da vedere esattamente l’elenco di tutti i files e le cartelle che verranno elimate e assicurarsi di star eseguendo l’operazione correttettamente.
17 Febbraio 2007 alle 23:44
Ciao sono Andrea,
il webmaster del sito Free Penguin, ho visto il tuo spazio e mi è molto piaciuto,
se vuoi potremo linkarci.
Questo è il mio sito http://www.freepenguin.altervista.org , e tratta di GNU/Linux e del software libero.
Saluti
Andrea
4 Agosto 2007 alle 09:41
…credo ci sia qualche errore!!…non riesco a farla funzionare!!!
4 Agosto 2007 alle 09:47
..pardon riporto l’errore:
Parse error: syntax error, unexpected ‘.’ in /web/htdocs/www.sito.it/home/cartella/script.php on line 10
25 Agosto 2007 alle 09:56
Ciao peter,
scusami se ti rispondo solo ora.
Innanzi tutto gradirei sapere se hai modificato qualcosa nello script o l’hai aggiunto in qualche altro script che avevi già creato.
Eventualmente prova a postare il codice per intero.
2 Ottobre 2007 alle 20:24
funziona tutto ok, grazie
2 Ottobre 2007 alle 22:30
;)
9 Ottobre 2007 alle 10:18
per peter.
Devi sostiruire i doppi apici coon le doppie virgolette semplici ” oppure con il il simbolo ‘ (apice singolo)
9 Ottobre 2007 alle 10:24
Dimenticavo, sostituisci anche questo rigo rmdir($folderName))
con rmdir($folderName);
9 Ottobre 2007 alle 15:36
Ciao santino! Grazie dei suggerimenti. Il secondo errore è stato una svista… il primo non è proprio un errore, ma è il sistema di wordpress che cambia le virgolette da solo… con gli apici non dovrebbe farlo…
Mi fa felice il fatto che tu abbia voluto registrarti!