PDA

View Full Version : Eliminazione di File e Directory


race2
10-12-2002, 14:47
Ho un piccolo script per eliminare i file contenuti in una Directory,




<?
$directory = "./";
$dir = opendir($directory);
while(false !== ($file = readdir($dir)))
{
if(file_exists("$directory/$file") && $file != "." && $file != "..")
{
unlink($file);
echo"$file = <b>Eliminato!!!</b><br>";
}
}
closedir($dir);
?>



settato cosi' mi elimina tutti i file del solito livello di dove si trova lo stasso script e in piu' si autoelimina, fin qui' tutto OK!

In piu' vorrei che se esistono delle directory insieme ai file le eliminasse di netto anche se contengono dei file.

come devo intervenire nel codice ???

cn73
10-12-2002, 15:09
Ricorsione?

cionci
10-12-2002, 15:33
Originariamente inviato da cn73
[B]Ricorsione?
Direi che sia la cosa più semplice e logica :)

race2
10-12-2002, 18:52
Che vuoi dire ???

cionci
10-12-2002, 19:24
Si ha ricorsione quando una funzione richiama se stessa...

In questo caso se nella directory che stai processando trovi un'altra directory richiami la funzione sulla directory che hai trovato....


<?php
function eliminaDirectory($directory)
{
if(!is_dir($directory))
return -1

$dir = opendir($directory);
while (false !== ($entry = readdir($dir)))
{
$file = "$directory/$entry";
if(is_dir($file))
eliminaDirectory($file); //questa è la ricorsione
if(unlink($file))
echo"$file <b>eliminato!!!</b><br>";
else
echo"$file <b>non eliminato!!!</b><br>";
}
closedir($dir);
return 0;
}

//Lo puoi richiamare così
eliminaDirectory("./");
?>

Il codice non l'ho testato...attenzione !!!

race2
11-12-2002, 18:19
mi da un errore di Apache .......

e mi dice pagina non trovata...

cionci
11-12-2002, 19:19
Che errore ti da ?

cionci
11-12-2002, 19:46
unlink non può cancellare anche le directory...

<?php
function eliminaDirectory($directory)
{
if(substr($directory, -1) != "/")
$directory .= "/";

if(!is_dir($directory))
return -1;

$dir = opendir($directory);

while (false !== ($entry = readdir($dir)))
{
if($entry != ".." && $entry != ".")
{
$file = "$directory$entry";

if(is_dir($file))
{
eliminaDirectory($file); //questa è la ricorsione
rmdir($file);
}
else if(unlink($file))
echo "$file <b>eliminato!!!</b><br>";
else
echo "$file <b>non eliminato!!!</b><br>";
}
}
closedir($dir);
return 0;
}

//Lo puoi richiamare così
eliminaDirectory("./pippo");
?>