Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    filemtime e controllo file

    Ciao a tutti,
    ho l'esigenza di controllare se un file esterno è stato modificato e, se è avvenuto, fare il refresh di una pagina. Per farlo ho pensato (richiamando la pagina con ajax ogni secondo) di confrontare l'ora attuale con l'ora del file e poi stampare il valore 1 se modificato, oppure 0.

    Teoricamente funziona ma nella pratica qualcosa va storto.
    Ogni volta che modifico il file esterno gli viene attribuito (giustamente) il valore 1 ma anziché passare immediatamente dopo al valore 0, rimane ad 1 per alcuni secondi causando il refresh continuo della pagina.

    Cosa sbaglio? Oppure, vista la mia ignoranza, cosa non so?

    Codice PHP:

     $esito 
    '0';  $time=date("H:i:s" ); $adesso=strtotime("$time");
     
    $filename 'c:\test.txt';
     if (
    file_exists($filename)) { $lastmodifica date ("H:i:s"filemtime($filename)); $lastmod=strtotime("$lastmodifica"); }
     if (
    $adesso-1<$lastmod){     $esito '1'// 1 refresh necessario }else{     $esito = '0';
    // 0 refresh non necessario}
    echo $esito
    Grazie per l'eventuale aiuto o anche solo per averlo letto

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    prova così:
    Codice PHP:
    clearstatcache();
    $esito "0";
    $now time(); 
    $filename "c:\test.txt";
    if (
    file_exists($filename)) {
         
    $file_time filemtime($filename);
    }
    if ((
    $now-1) < $file_time){
         
    $esito "1"// 1 refresh necessario
    }else{
         
    $esito "0"// 0 refresh non necessario
    }
    echo 
    $esito
    eXvision

  3. #3
    Grazie Brodik, ho provato ma l'esito è negativo, peggiorato e non so perché non mi funziona con ajax ma è relativamente importante visto che non risolve.

  4. #4
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    Prova a vedere se come logica ti può andare bene... io l'ho testato e sembra funzionare
    Codice PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_SESSION["filetime"])){
        
    $_SESSION["filetime"] = 0;
    }
    clearstatcache();
    $esito "0"
    $filename "/path/to/file";
    if(
    file_exists($filename)) {
        
    $file_time filemtime($filename);
    }
    if(
    $_SESSION["filetime"] < $file_time){
        
    $esito "1";
        
    $_SESSION["filetime"] = $file_time;
    }
    print 
    $esito;

    ?>
    eXvision

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Prova con inotify, non l'ho mai usato ma vale la pena dare un'occhiata
    http://php.net/manual/en/book.inotify.php

  6. #6
    Brodik, ho provato ma non si schioda da 0, stasera proverò nuovamente con più calma.

  7. #7
    Grazie della dritta M4V1, provo a vedere

  8. #8
    Ultimo aggiornamento: preso dallo sconforto (ci sto dedicando davvero parecchio tempo) ho voluto fare una prova che mi sembrava azzardata ma, ragionando sul fatto che con il mio script sembra (ma non è) che il file venga aggiornato consecutivamente per alcuni secondi, ho provato modificare la condizione IF ($adesso-1 <$lastmod) in un ritardo ($adesso+3==$lastmod) e... il refresh a raffica è cessato! In compenso è sorto un altro problema: ora l'aggiornamento avviene con un ritardo che non è di soli 3 secondi. Non è ancora fuoco ma mi sembra fuocherello.

    Aggiungo: controllando il file accade che l'ora del file modificato sia es. 21.30.03 mentre il refresh della pagina è indicato alle 21.30.00 quindi in anticipo di 3 secondi... mi sfugge qualcosa
    Ultima modifica di Paolissimo63; 15-07-2018 a 21:42

  9. #9
    Grazie Brodik, hai ragione funziona! Inizialmente mi collegavo ad una unità di rete ma il locale è ok, grazie e mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.