• User Attivo

    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


  • Super User

    @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]


  • User Attivo

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


  • Super User

    @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 Peter

    Scusa, 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 fa

       if ((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]


  • User Attivo

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


  • Super User

    @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)


  • User Attivo

    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


  • Super User

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


  • User Attivo

    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:03

    Removed Directory: /var/www/html/prova/