2017-01-11 4 views
-1

5時間の試行後、私はあなたに着きます。ファイルからのテキストのライブ更新ページ

ファイルを変更すると自動的に自分自身を更新し、ファイルの内容を表示するページを作成する必要があります。 foo.txtがあるとしましょう。それは継続的に更新しています。ページがn秒ごとにリロードされるのを嫌いです。さらに、このファイルの最後の30行だけを表示する必要があります。私はこれを思いついた:

<?php //live.php 
$handle = popen("tail -30l foo.txt 2>&1", 'r'); 
while(!feof($handle)) { 
    $buffer = fgets($handle); 
    echo "$buffer<br/>\n"; 
    ob_flush(); 
    flush(); 
} 
pclose($handle); 
?> 

最後の30行のファイルは正常に表示されますが、更新はできません。 - 私がこだわっているところだ私は、タスクの下に達成する方法がわからない:ファイル更新のための

  1. チェック、
  2. 表示live.phpファイルの変更。

これでAjaxの更新機能を使用できますか?

+0

まず、更新された最後の3行をいつ表示しますか?瞬時に、またはある期間の後に? – squiroid

+0

すぐに、すぐに。 – Bielecki

+0

これは、ajax呼び出しによってサーバーからの変更をチェックする場合にのみ実行できます。変更があればページをアップロードするだけです。ですから、私は、現在の30行のハッシュを作成してサーバーに送信し、そのハッシュをサーバー側の現在の30行と比較することをお勧めします。変更があれば、新しい30行を送り返します。そうでなければ、false値のフラグを送信します。 そして、別の方法でサーバーからフロントエンドへのソケット接続を作成する必要がある場合は、ファイルに変更があった場合(CRON JOBを使用)、ソケットを介してフロントエンドとディスプレイに送信します。 – squiroid

答えて

0

これには2通りの方法があります。

1)プール これは主にフロントエンドによって行われます。フロントエンドから毎秒毎にデータを変更する必要があります。変更が検出された場合は、サーバーから新しいデータを送信し、現在のデータを新しいデータで置き換えます。変更が見つからない場合は、交換する必要はありません。

PROS:

i) Page will only refresh if there is any change on server. 
ii) Client is responsible for detection manily. 

2)これは、主にサーバによって達成することができる を押します。ファイルに変更があった場合は、PHP終了時に検出されます(CRON JOB経由)。ソケットを介してフロントエンドにデータを送信します。

PROS:

i) Only data will send if there is change in data. No extra network calls. 

この記事は役立ちます。

In what situations would AJAX long/short polling be preferred over HTML5 WebSockets?

関連する問題