- Home
- Categorie
- Coding e Sistemistica
- PHP
- Cancella File
-
Cancella File
Salve ragazzi,
...da circa una settimana non trovo soluzione su come cancellare dei file sul server....mi spiego meglio, cancellare delle cartelle (non vuote) che per comodità hanno una estensione, ad esempio "cartella.WEB" quindi identificabili da comuni cartelle (i permessi sono 755) ed inoltre vorrei cancellarle per data ad esmpio solo se vecchie di 3 giorni o altro.
Lo script che sto provando è questo:<?php
function removeDir($path) {
// Add trailing slash to $path if one is not there
if (substr($path, -1, 1) != "/") {
$path .= "/";
}$normal_files = glob($path . "");
$hidden_files = glob($path . ".?");
$all_files = array_merge($normal_files, $hidden_files);foreach ($all_files as $file) {
# Skip pseudo links to current and parent dirs (./ and ../).
if (preg_match("/(.|..)$/", $file))
{
continue;
}if (is_file($file) === TRUE) { // Remove each file in this Directory unlink($file); echo "Removed File: " . $file . "<br>"; } else if (is_dir($file) === TRUE) { // If this Directory contains a Subdirectory, run this Function on it removeDir($file); }
}
// Remove Directory once Files have been removed (If Exists)
if (is_dir($path) === TRUE) {
rmdir($path);
echo "<br>Removed Directory: " . $path . "<br><br>";
}
}#To remove a dir:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');
?>....usandolo in questo modo cancella tutto!!!
infatti altro problema è che io vorrei è cancellare le cartelle dentro "tmp" e non anche la stessa!!!..vabbe speriamo che qualcuno mi aiuti, non sono un grando esperto in php, provo a fare qualcosa da solo...ma come si vede non arrivo alla soluzione!
Grazie anticipatamente Peter
-
@peterminnow said:
Salve ragazzi,
...da circa una settimana non trovo soluzione su come cancellare dei file sul server....mi spiego meglio, cancellare delle cartelle (non vuote) che per comodità hanno una estensione, ad esempio "cartella.WEB" quindi identificabili da comuni cartelle (i permessi sono 755) ed inoltre vorrei cancellarle per data ad esmpio solo se vecchie di 3 giorni o altro.
Lo script che sto provando è questo:<?php
function removeDir($path) {
// Add trailing slash to $path if one is not there
if (substr($path, -1, 1) != "/") {
$path .= "/";
}$normal_files = glob($path . "");
$hidden_files = glob($path . ".?");
$all_files = array_merge($normal_files, $hidden_files);foreach ($all_files as $file) {
# Skip pseudo links to current and parent dirs (./ and ../).
if (preg_match("/(.|..)$/", $file))
{
continue;
}if (is_file($file) === TRUE) { // Remove each file in this Directory unlink($file); echo "Removed File: " . $file . "<br>"; } else if (is_dir($file) === TRUE) { // If this Directory contains a Subdirectory, run this Function on it removeDir($file); }
}
// Remove Directory once Files have been removed (If Exists)
if (is_dir($path) === TRUE) {
rmdir($path);
echo "<br>Removed Directory: " . $path . "<br><br>";
}
}#To remove a dir:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');
?>....usandolo in questo modo cancella tutto!!!
infatti altro problema è che io vorrei è cancellare le cartelle dentro "tmp" e non anche la stessa!!!..vabbe speriamo che qualcuno mi aiuti, non sono un grando esperto in php, provo a fare qualcosa da solo...ma come si vede non arrivo alla soluzione!
Grazie anticipatamente Peter
Se non vuoi rimuovere la cartella tmp togli questa riga:
[php]#To remove a dir:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');[/php]Nella riga
[php] else if (is_dir($file) === TRUE) {[/php]
Devi verificare che l'estensione sia quella da te desiderata, idem per la data di modifica/creazione.
Per quento riguarda la data devi usare questa funzione filectime
Per l'enstensione:
[php]$ext = strtolower($file,"."));[/php]
-
..ti rangrazio per la risposta e noto la competenza!...per quanto riguarda la prima credo allora di capire che lo script lo devo mettere nella cartella in questione se tolgo questa riga:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');
ma per il resto mi servirebbe ancora qualche aiutino con un esempio piu completo...se hai tempo grazie cmq tantissimo
ciao Peter
-
@peterminnow said:
..ti rangrazio per la risposta e noto la competenza!...per quanto riguarda la prima credo allora di capire che lo script lo devo mettere nella cartella in questione se tolgo questa riga:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');
ma per il resto mi servirebbe ancora qualche aiutino con un esempio piu completo...se hai tempo grazie cmq tantissimo
ciao PeterScusa, per l'estensione ho sbagliato (ero stanco)
[php]removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');[/php]
Si, questo codice elimina la directory "tmp".[php]
<?php
$normal_files = glob($path . "");
$hidden_files = glob($path . ".?");
$all_files = array_merge($normal_files, $hidden_files);foreach ($all_files as $file) {
# Skip pseudo links to current and parent dirs (./ and ../).
if (preg_match("/(.|..)$/", $file))
{
continue;
}$ext = strtolower(strrchr($v->value['name'],"."));
$data_minima = time()-(36060); //Ammettiamo tu voglia eliminare quelli di 3 giorni faif ((is_file($file) === TRUE) && ($ext==".jpg") && (filectime($file)>=$data_minima)) { // Remove each file in this Directory unlink($file); echo "Removed File: " . $file . "<br>"; } else if (is_dir($file) === TRUE) { // If this Directory contains a Subdirectory, run this Function on it removeDir($file); }
}
// Remove Directory once Files have been removed (If Exists)
if (is_dir($path) === TRUE) {
rmdir($path);
echo "<br>Removed Directory: " . $path . "<br><br>";
}
}?>
[/php]In questo caso data_minima sarà uguale a 3 giorni fa precisi, ossia con ora, minuti e secondi di quando esegui lo script.
Se invece vuoi eliminare quelli creati da dalla mezzanotte di 3 giorni fa sostituisci la riga in questo modo:
[php]$data_minima = mktime(0, 0, 0, date("m"), date("d")-3, date("Y"));[/php]
-
..purtroppo ancora non succede nulla!!!
provo ad essere più preciso su quanto vorrei fare, in quanto ho un software che spedisce le foto su un server e crea una cartella con punto COM...quindi abbiamo "pippo.COM" (e dentro tutte le foto) , ora con wget (da un serverino in locale con Linux Fedora 7) scarico la cartella, questo lo script bash inserito poi nel cron:wget -r -c -nc -nH -t 45 --cut-dirs=1 -P /home/utente ftp://username:[email protected]/cartellafoto/*.COM
wget -O - http://www.sitoremoto.it/rename.php
questo script rename.php che rinomina in punto OLD le cartelle ormai scaricate:
<?php
function changeext($directory, $ext1, $ext2, $verbose = false) {
$num = 0;
if($curdir = opendir($directory)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {$srcfile = $directory . '/' . $file; $string = "$file"; $str = strlen($ext1); $str++; $newfile = substr($string, 0, -$str); $newfile = $newfile.'.'.$ext2; $dstfile = $directory . '/' . $newfile; if (eregi("\.$ext1",$file)) { # Look at only files with a pre-defined extension $fileHand = fopen($srcfile, 'r'); fclose($fileHand); rename($srcfile, $dstfile ); } if(is_dir($srcfile)) { $num += changeext($srcfile, $ext1, $ext2, $verbose); } }
}
closedir($curdir);
}
return $num;
}changeext('/web/htdocs/www.sitoremoto.it/home/cartella/', 'COM', 'OLD', 'false');
?>
a questo punto entrava in gioco lo script in questione che cancella le cartelle punto OLD.
spero di essere stato un pochino piu preciso..cmq sei stato grande e ti ringrazio tantissimo, poi se hai tempo ancora da dedicarmi ne sarei felice, sai il php mi appassiona ma riesco a fare giusto qualche stupidaggine, chissa se a forza di insistere!!!...ciao Peter
-
@peterminnow said:
..purtroppo ancora non succede nulla!!!
provo ad essere più preciso su quanto vorrei fare, in quanto ho un software che spedisce le foto su un server e crea una cartella con punto COM...quindi abbiamo "pippo.COM" (e dentro tutte le foto) , ora con wget (da un serverino in locale con Linux Fedora 7) scarico la cartella, questo lo script bash inserito poi nel cron:wget -r -c -nc -nH -t 45 --cut-dirs=1 -P /home/utente ftp://username:[email protected]/cartellafoto/*.COM
wget -O - http://www.sitoremoto.it/rename.php
questo script rename.php che rinomina in punto OLD le cartelle ormai scaricate:
<?php
function changeext($directory, $ext1, $ext2, $verbose = false) {
$num = 0;
if($curdir = opendir($directory)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {$srcfile = $directory . '/' . $file; $string = "$file"; $str = strlen($ext1); $str++; $newfile = substr($string, 0, -$str); $newfile = $newfile.'.'.$ext2; $dstfile = $directory . '/' . $newfile; if (eregi("\.$ext1",$file)) { # Look at only files with a pre-defined extension $fileHand = fopen($srcfile, 'r'); fclose($fileHand); rename($srcfile, $dstfile ); } if(is_dir($srcfile)) { $num += changeext($srcfile, $ext1, $ext2, $verbose); } }
}
closedir($curdir);
}
return $num;
}changeext('/web/htdocs/www.sitoremoto.it/home/cartella/', 'COM', 'OLD', 'false');
?>
a questo punto entrava in gioco lo script in questione che cancella le cartelle punto OLD.
spero di essere stato un pochino piu preciso..cmq sei stato grande e ti ringrazio tantissimo, poi se hai tempo ancora da dedicarmi ne sarei felice, sai il php mi appassiona ma riesco a fare giusto qualche stupidaggine, chissa se a forza di insistere!!!...ciao Peter
e questo codice da dove sbuca???
Avevo capito che dovevi cancellare i files dentro tmp e non le cartelle.
Comunque avevo sbagliato a prescindere a consigliarti di togliere:
#To remove a dir:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');Prova cosi:
[php]<?php
function removeDir($path) {
// Add trailing slash to $path if one is not there
if (substr($path, -1, 1) != "/") {
$path .= "/";
}
$normal_files = glob($path . "");
$hidden_files = glob($path . ".?");
$all_files = array_merge($normal_files, $hidden_files);foreach ($all_files as $file) {
# Skip pseudo links to current and parent dirs (./ and ../).
if (preg_match("/(.|..)$/", $file))
{
continue;
}if ((is_file($file) === TRUE)) { // Remove each file in this Directory unlink($file); echo "Removed File: " . $file . "<br>"; } else if (is_dir($file) === TRUE) { // If this Directory contains a Subdirectory, run this Function on it $ext = strtolower(strrchr($file,"."));
$data_minima = time()-(36060); //Ammettiamo tu voglia eliminare quelli di 3 giorni fa
if($ext==".old" && (filectime($file)>=$data_minima))
removeDir($file);
}
}
// Remove Directory once Files have been removed (If Exists)
if (is_dir($path) === TRUE && $path!="tmp/") {
rmdir($path);
echo "<br>Removed Directory: " . $path . "<br><br>";
}
}
remove a dir:
removeDir('/home/fhlinux206/t/thuraisingham.net/tmp/');
?>[/php]Questa funziona al 100% poichè l'ho provata. elimina tutte le cartelle "nome".old (sia maiuscolo che minuscolo => OLD)
-
Veramente perfetto funziona!...a parte la data che non sembra funzionare, forse non è al posto giusto...cmq mi accontento!
Hai fatto un lavorone....grazie tantissimo ciao Peter
-
@peterminnow said:
Veramente perfetto funziona!...a parte la data che non sembra funzionare, forse non è al posto giusto...cmq mi accontento!
Hai fatto un lavorone....grazie tantissimo ciao Peter
Prova a visualizzare la data:
[php]echo date("d/m/Y - H:i:s", filectime($file)).'<br />';
if($ext==".old" && (filectime($file)>=$data_minima))
removeDir($file);[/php]
Vediamo se magari la funzione filectime non fa quello che dovrebbe (in effetti non so se funziona anche sulle directory.
-
si ok mi da data e ora delle cartelle:
10/08/2007 - 18:17:15
10/08/2007 - 18:15:57
10/08/2007 - 13:36:00
12/08/2007 - 19:28:21
10/08/2007 - 13:36:03Removed Directory: /var/www/html/prova/