• User Attivo

    [Risolto] Controllare frequenza aggiornamento files

    Salve,
    vi chiedo aiuto nello scrivere un script che controlli automaticamente la data di aggiornamento di alcune foto in una cartella del mio server e segnali quelle non aggiornate da piu di 24 ore.

    Mi serve per tenere monitorate delle webcam e non doverle controllare una ad una ogni giorno.

    Grazie mille!


  • User

    Basta che usi la funzione glob() per leggere i files della cartella e poi usi fileatime o fstat per vedere l'ultimo accesso al file quando è stato.


  • User Attivo

    E per far colorare di rosso per esempio i file che non sono aggiornati da piu di 24h e posizionarli all'inizio dell'elenco?

    Grazie mille!


  • User Attivo

    Con questo codice:

    [php]<?php
    $dir = './';

    foreach(glob($dir.'*.jpg') as $file) {
    print $file . "\n";
    print "<br />";
    }

    ?>[/php]

    sono riuscito ad ottenere una lista di tutte le foto della directory. Ora come faccio a stampare la data di aggiornamento e colorare di rosso quelle non aggiornate da piu di 24h?


  • User

    Questo è un esempio:

    
    <?php 
    $dir = './'; 
      
    foreach(glob($dir.'*.jpg') as $file) { 
        print $file . " - Data: " . date("F d Y H:i:s.", fileatime($file) . "\n"; 
        if (fileatime($file) < (time() - (24 * 60 * 60)))
           echo "<font color=red> non modificata </font>\n";
        print "<br />"; 
    } 
    
    ?>
    
    

  • User Attivo

    Grazie EcoBB!
    Funziona, ho aggiunto un echo "<br />"; dopo "60)))" di modo che impagina meglio i files.

    Un altra domanda, se volessi linkare $file all'immagine caricata sul server come posso fare? Ho fatto delle prove ma sono completamente negato!

    Grazie ancora!


  • User
    
    <?php 
    $dir = './'; 
      
    foreach(glob($dir.'*.jpg') as $file) { 
        print "<a href='$file'>$file</a> - Data: " . date("F d Y H:i:s.", fileatime($file) . "\n"; 
        if (fileatime($file) < (time() - (24 * 60 * 60)))
            echo "<font color=red> non modificata </font>\n";
        print "<br />"; 
    } 
    
    ?>
    
    

  • User Attivo

    Un ultima cosa poi non ti stresso piu...
    E' possibile stampare solamente i files che non sono aggiornati da 12h a 15 giorni?
    Perchè nella cartella ci sono anche delle immagini statiche e mi da fastidio che compaiano come "non modificate"!

    Grazie mille!


  • ModSenior

    Ciao rdo,
    Prova cosi:
    [php]
    <?php
    $dir = './';

    foreach(glob($dir.'*.jpg') as $file) {
    print "<a href='$file'>$file</a> - Data: " . date("F d Y H:i:s.", fileatime($file) . "\n";
    if (fileatime($file) < (time() - (12 * 60 * 60)) && fileatime($file) > (time() - (15 * 24 * 60 * 60)))
    echo "<font color=red> non modificata </font>\n";
    print "<br />";
    }

    ?>
    [/php]


  • User Attivo

    Non funzia...

    Parse error: syntax error, unexpected ';' in /srv/www/hosting/sites/............................php on line 13

    Non sono riuscito a togliere l'errore!! 😞


  • User Attivo

    Fatto!!! Grazie mille!


  • User Attivo

    Eccomi ancora a stressare.

    Allora, il risultato voluto è quello che:

    • immagini modificate da meno di 20 minuti = VERDE
    • immagini modificate tra 21 minuti e 10 ore = ARANCIONE
    • immagini modificate più di 10 ore prima fino a 15 giorni = ROSSO

    Il codice che ho scritto è questo:

    [php]
    <?php
    $dir = './';

    foreach(glob($dir.'*.jpg') as $file) {
    if (fileatime($file) < (time() - (10 * 60 * 60)) && fileatime($file) > (time() - (15 * 24 * 60 * 60))) {
    print "<a href='$file' class='elen'><font color=red><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n");
    echo "<p />";

    }
    if (fileatime($file) < (time() - (20 * 60)) && fileatime($file) > (time() - (09 * 60 * 60))) {
    print "<a href='$file' class='elen'><font color=orange><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n");
    echo "<p />";

    }
    if (filemtime($file) > (time() - (19 * 60))) {
    print "<a href='$file' class='elen'><font color=green><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n");
    echo "<p />";

    }

    }

    ?>
    [/php]

    Il problema è che con questo codice mi escono solo le verdi! Cosa sto sbagliando?

    Grazie mille!!!!


  • User Attivo

    Aiutoooooo! Grazie!


  • User

    A parte dei buchi (quelle modificate tra 9:01 ore e 9:59 non le visualizza) sembrerebbe giusto.
    Sei sicuro (guardando il sorgente pagina) che siano verdi? Ossia che ci sia il font color green


  • User Attivo

    Sisi, le verdi sono le uniche che mostra!


  • User

    A parte che io ne vedo una rossa, prova così...

    
     <?php  
    $dir = './';  
       
    foreach(glob($dir.'*.jpg') as $file) {  
        if (filemtime($file) > (time() - (19 * 60))) { 
        print "<a href='$file' class='elen'><font color=green><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n"); 
        echo "<p />"; 
    } 
        elseif (fileatime($file) > (time() - (10 * 60 * 60)))    { 
        print "<a href='$file' class='elen'><font color=orange><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n"); 
        echo "<p />"; 
    } 
        elseif (fileatime($file) > (time() - (15 * 24 * 60 * 60)))    { 
        print "<a href='$file' class='elen'><font color=red><b>$file</b></font></a> <span class='picc'>- <b>Data</b>: " . date("d F Y H:i:s", filemtime($file) . "\n"); 
        echo "<p />"; 
    
    } 
    
    }  
    
    ?>  
    
    

  • User Attivo

    Con il tuo nuovo codice gli arancioni continuano a mancare... Dovrebbe stamparne una modificata il 07 August ma nada.

    E poi come mai in rosso si vedono delle immagini modificate nel 2008 quando teoricamente quelle piu vecchie di 15 giorni non dovrebbero comparire?

    Che sclero...! Grazie mille!


  • User

    Trovato!

    Alcune volte usi filemtime altre fileatime...


  • User Attivo

    Noooooo! Lo sapevo che sarebbe stata una cosa del genere! Ahahah

    Grazie mille EcoBB, molto molto gentile!
    Spero non ti debba rompere più 😉


  • User Attivo

    Sono tornato a stressarvi!
    Sto provando ora a inserire un paio di immagini che però sono su domini diversi da quello dove viene caricata la pagina php.
    Ho trovato questo codice:

    [php]<?php

    function filemtime_remote($uri)
    {
    $uri = parse_url($uri);
    $handle = @fsockopen($uri['host'],80);
    if(!$handle)
    return 0;

    fputs($handle,"GET $uri[path] HTTP/1.1\r\nHost: $uri[host]\r\n\r\n");
    $result = 0;
    while(!feof($handle))
    {
        $line = fgets($handle,1024);
        if(!trim($line))
            break;
    
        $col = strpos($line,':');
        if($col !== false)
        {
            $header = trim(substr($line,0,$col));
            $value = trim(substr($line,$col+1));
            if(strtolower($header) == 'last-modified')
            {
                $result = strtotime($value);
                break;
            }
        }
    }
    fclose($handle);
    return $result;
    

    }
    echo filemtime_remote('...............');

    ?>[/php]

    che però mi restituisce un numero tipo "1255956361"...!

    Come mai?? Cosa c'è che non va??

    DANKE!