2011-11-08 17 views
2

PHPを使用して.txtファイルを読み込み、そのデータをWebページに解析しています。 .txtファイルはサーバーのステータスを表示するローカルログファイルです。現在、最後の行を読み込んで自分のサイトにプッシュできます。PHPを使用してtxtファイルの内容でWebページを更新する

ただし、サーバーのステータスが変更されると、.txtファイルはローカルに更新されますが、新しい値がサイトに表示されることはありません。

私はコンテンツを表示するためにHTML5/Javascriptを使用しています。ファイルを読み込み、入力を解析/消去するPHPを使用しています。私が使用しているPHPファイルの読み込み機能を示すコードセグメントは、10秒ごとに実行されます。このセグメントの実行後、表示(私はHTML5キャンバスを使用しています)は更新されますが、データは一定のままです。手動でページを更新すると、表示が更新されます。

このtxtファイルを10秒ごとにポーリングし、最後の行を呼び出し可能な変数にプッシュすることは可能ですか?

function getCurrentStatus() { 
    <?php   
     clearstatcache(); 

     $myFile = "C:\available.log"; 

     $fh = fopen($myFile, 'r'); 
     $theData = fread($fh, filesize($myFile)); 
     fclose($fh); 

     $statusList = explode("\n", $theData); 
     $statusListLength = count($statusList) - 2; 
     $currentStatus = explode(" ", $statusList[$statusListLength]); 
     $previousStatus = explode(" ", $statusList[$statusListLength - 1]); 

     $myFile = "C:\std_server0.out"; 

     $fh = fopen($myFile, 'r'); 
     $theData = fread($fh, filesize($myFile)); 
     fclose($fh); 

     $garbageCollector = array_map('trim',explode("\n", $theData)); 
     $garbageCollectorLength = count($garbageCollector); 
    ?> 
    currentStatus = ["Latest Status:", "<?php echo $currentStatus[0]; ?>", "First Started:", "<?php echo $currentStatus[1]; ?>", "<?php echo $currentStatus[2]; ?>", "Last Checked:", "<?php echo $currentStatus[4]; ?>", "<?php echo $currentStatus[5]; ?>"];  

    latestGC = "<?php echo $garbageCollector[$garbageCollectorLength - 2] ?>" 
} 
+0

'fopen''fread'と' fclose'の3行の代わりに 'file_get_contents()'を使うことができます – Treffynnon

+0

PHPがうまくやっていないサーバープッシュ技術について話しているようです。あなたの最も簡単な賭けは、ajaxを介してステータスを定期的にリロードすることです。 –

答えて

2

これがうまくいかない理由は、JavaScriptがクライアントのブラウザで実行され、PHPがサーバー上で実行されるためです。最初のロードでは、ページが作成されているときにPHPがそのファイルの内容を取得しているため、期待していたものが得られます。その後、PHPは消えてしまいました。

コンテンツを定期的に更新するには、おそらくAJAXを使用する必要があります。

+0

私はそれが理にかなっています。説明をありがとう、私は私のアプリケーションのためのAJAXを使用していくつかの例を見ていきます。 – Jarek

0

何かをポーリングすることはお勧めできません。必要なのは、新しいデータや変更されたデータについてのサーバーのプッシュです。これを見てhttp://www.zeitoun.net/articles/comet_and_php/start

これが役に立ちます。

+0

おかげさまで、チャットボックスの例を見ていきます。私のやりたいことに似ているようです。 – Jarek

+0

サーバープッシュ技術の利点は、イベントが発生したときにクライアントにデータを送信できることです。残念ながら、PHPにはグローバルな状態はなく、イベントの概念もありません。 –

0

私も同様の問題があり、ブラウザのキャッシュに問題があることが判明しました。これを確認するには、Chrome(Windows/Linux = Ctrl + Shift + I、Mac = Cmd + Opt + I)でデベロッパーツールを開き、そこでキャッシュを無効にします。

これで問題が解決した場合は、回避策を見つける必要があります。それぞれのページにユニークなダミーのクエリ文字列を追加して、ブラウザを欺いてユニークなページであると考えるようにすることができます。私の場合は、time()を使用してタイムスタンプを作成し、それをページのURLに追加しました。

関連する問題