2016-03-31 5 views
0

FTPサーバーからWebページに.txtを表示する.phpファイルがあります。.txtファイルの内容が変更されたときに.phpサイトを更新する方法

私の問題は、何かが.txtファイルに追加されたときに.phpページを更新するようにしたいということです。今、私はこれを使用してい

の.txtファイルが変更されたかどうかを確認するために、ページごとに5秒を更新し
<?php 
    header("Refresh: 5; URL=$url1"); 
    include('filename.txt'); 
?> 

。私は同じ情報でウェブページを見ている人のログを盗むので、この方法は嫌いです。

.phpを変更して、filename.txtのみを更新できるかどうかは疑問でした。

+0

[filemtime](http://php.net/manual/en/function.filemtime.php)は、ファイルが最後に変更されたときにチェックするのに便利です... – Henders

+0

これはウェブソケットの仕事かもしれません。 –

+0

もしあなたがjavascriptを使うことができれば、AJAXでファイルの内容を取得することもできます(残念なことに、数秒ごとに)。 – DiD

答えて

0

これにはfiletime()を使用します。そこ

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

あなたがトリックで(より具体的にjQueryの)PHPとJavaScriptのロジックを組み合わせて使用​​することができますからhttp://php.net/manual/en/function.filemtime.php

例。もちろん、これは回避策です(改善するために変更することができます)。

擬似例は次のようにすることができ

//新しいPHPファイル "proxy.php"

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

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

//あなたのPHPファイル

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

これがうまくいくと思います。

+0

私のために働かなかった、それはもう全くリフレッシュされません。 – raw

+0

私は実際に私の実際のコードを関連する部分だけに取り除きました。明らかに貼り付けをコピーすると、ここで言及されている完全なHTML形式が存在しないため、これは機能しません。私のコードを編集しました。見てください。 –

関連する問題