2016-03-31 8 views
0

Ich habe eine .php-Datei, die eine. Txt von meinem FTP-Server auf einer Webseite anzeigt.Wie bekomme ich meine .php-Seite zu aktualisieren, wenn der Inhalt der TXT-Datei geändert wird

Mein Problem ist, dass ich möchte, dass die .php-Seite aktualisiert wird, wenn etwas zur .txt-Datei hinzugefügt wird.

Gerade jetzt ich dies mit:

<?php 
    header("Refresh: 5; URL=$url1"); 
    include('filename.txt'); 
?> 

, die der Seite alle fünf Sekunden aktualisiert, um zu sehen, ob die TXT-Datei geändert wird. Ich mag diese Methode nicht, weil sie meine Protokolle darüber verbreitet, wer die Webseite mit denselben Informationen anzeigt.

Ich fragte mich, ob ich die .php ändern könnte, um nur Dateinamen zu aktualisieren.txt wird geändert.

+0

[Dateizeit] (http://php.net/manual/en/function.filemtime.php) ist praktisch für die Überprüfung, wenn eine Datei zuletzt geändert wurde ... – Henders

+0

Dies könnte ein Job für Web-Sockets sein. –

+0

Wenn Sie Javascript verwenden, können Sie auch Dateiinhalte in AJAX (leider alle paar Sekunden) erhalten und prüfen, ob es sich in diesem Moment zur Aktualisierung ändert. – DiD

Antwort

0

Verwenden Sie dazu Filetime(). http://php.net/manual/en/function.filemtime.php

Beispiel von dort

<?php 
// outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23. 

$filename = 'somefile.txt'; 
if (file_exists($filename)) { 
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); 
} 
0

Sie eine logische Kombination von PHP und Javascript verwenden können (insbesondere JQuery) mit einem Trick. Natürlich ist dies ein Workaround-Ansatz (kann modifiziert werden, um es besser zu machen).

Pseudo-Beispiel kann wie:

// Eine neue PHP-Datei "proxy.php"

<?php 
     if (!empty($_GET) && !empty($_GET['check'])) { 
      $previouslyChecked = $_GET['check']; 

      if (filemtime("filename.txt") > $previouslyChecked) { 
       echo 1; 
      } else { 
       echo 0; 
      } 
      die(); 
     } 

// Ihre PHP-Datei

<html> 
<head> 
    <script type="text/javascript" src="jquery.min.js"></script> 
</head> 

<body> 
<?php 
    include('filename.txt'); 
    $lastModified = filemtime("filename.txt"); 
?> 
    <input type="hidden" id="loadedAt" value="<?php echo $lastModified; ?>"/> 


    <script type="text/javascript"> 

     function reloadPage(){ 
      console.log("within reload"); 
      window.location.reload(); 
     } 

     function checkFile(){ 
      console.log("checkfile"); 
      jQuery.ajax({ 
       type: "GET", 
       url: "proxy.php", 
       data: {check: jQuery("#loadedAt").val()}, 
       success: function(data){ 
        if (data == 1) {  
         console.log("reload called"); 
         reloadPage(); 
        } 
        setTimeout(checkFile, 5000); 
       } 
      }); 
     }; 

     jQuery(document).ready(function(){ 
      console.log("checkfile called"); 
      checkFile(); 
     }); 
    </script> 

</body> 
</html> 

Hoffe, das könnte funktionieren.

+0

Funktionierte nicht für mich, es wird nicht mehr aktualisiert. – raw

+0

Ich entfernte tatsächlich meinen tatsächlichen Code nur zu den verwandten Teilen. Das Kopieren funktioniert natürlich nicht, da hier kein perfektes HTML-Format angegeben ist. Hat meinen Code bearbeitet. Bitte schau es dir an. –

Verwandte Themen