Cancellare Directory in Php

Scritto da loige

Spesso 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.

Sponsor

9 Commenti a “Cancellare Directory in Php”

  1. 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

  2. …credo ci sia qualche errore!!…non riesco a farla funzionare!!!

  3. ..pardon riporto l’errore:
    Parse error: syntax error, unexpected ‘.’ in /web/htdocs/www.sito.it/home/cartella/script.php on line 10

  4. 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.

  5. funziona tutto ok, grazie :)

  6. ;)

  7. per peter.
    Devi sostiruire i doppi apici coon le doppie virgolette semplici ” oppure con il il simbolo ‘ (apice singolo)

  8. Dimenticavo, sostituisci anche questo rigo rmdir($folderName))
    con rmdir($folderName);

  9. 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! ;)

Scrivi un commento