2012-04-16 16 views
0

私はPHPで書かれたWebページを持っていると私がする必要がある同様の質問thorugh外観を持っていたが、非常に私は...更新内容外部の.txtファイル

を探しています何を発見していません外部の.txtファイルの内容を表示し、定期的に.txtファイルの内容が変更されるたびに20秒ごとに更新する必要があります。

私はこれをIFRAMEを入れ、PHPのincludeを使用してファイルの内容を表示することでこれを達成できました。その後、20秒ごとにインクルードページを更新します。

これはうまくいきますが、IFRAMEがリフレッシュすると、ページビューに対してehcihカウントが更新されるため、ウェブサイトの統計情報が壊れてしまいます。

これを行うには、AJAXなどを使用できますか?私は彼らが私の統計に深刻な影響を与えずに、サーバーに負荷をかけずに、これを行う別の方法かもしれないと確信しています。

私がすでに持っているものを習得するのに私の日がすでにかかっているので、できるだけ具体的な指示をしてください。

事前に感謝します。

+0

iframeに外部の.txtファイルをそのまま置くことはできませんクライアントはソースサーバーから直接ロードしますか?そうでない場合は、AJAXリクエストが「ページビュー数にカウントされないように」統計情報を収集するように調整する必要があります。 – DaveRandom

+0

ページまたはiframeをリフレッシュしていますか? iframeのコンテンツが同じドメインにある場合は、簡単に再読み込みできます。 –

答えて

0

あなたは確かに彗星/ロングポーリングのような何かをPHPで使うことができますが、the accepted answer to this questionには言及されています。サーバーとしてのApache。

PHPに限定されていない場合は、socket.ioを使用すると理想的です。また、あなたがあまりにも多くのクライアントを持っていない場合、彗星はまだあなたのために大丈夫かもしれません。

0

それだけでそのセッションのために一度ロードされるように、私は、セッションに基づいて、GoogleアナリティクスJavaScriptを非表示になります。

<?php 
session_start(); 
if (!isset($_SESSION['beenHere']) || !$_SESSION['beenHere']) { 
?> 
    <!-- ga.js javascript here --> 
<?php 
} else { 
    $_SESSION['beenHere'] = true; 
} 
?> 

をあなたが望むように、あなたはページをリロード続けることができます。ただし、PHPでテキストファイルをロードするには、が必要ですと推測されていますか?それ以外の場合は、テキストファイルをiFrameにロードし、JavaScriptのsetTimeoutコールを使用してiframe srcを更新するだけではありませんか?

1

あなたはAjax/JavaScriptを要求していますが、Javaアプレットはほとんどのデスクトップブラウザで動作しますが、この作業はJavaでは非常に簡単なので、Javaアプレットでどのように行うかを例に挙げました。

// PHP/HTML embed code 
<APPLET CODE="readTextFile.class" width=400 height=300> 
    <PARAM NAME="fileToRead" VALUE="<?php echo $textfile ?>"> 
    Your browser does not support the <code>applet</code> tag. 
</APPLET> 

ご自分のサーバからファイルごとに20秒を読みますcmd.exeの

// readTextFile.java 

import java.applet.*; 
import java.awt.*; 
import java.io.*; 
import java.net.*; 
import java.util.*; 

public class readTextFile extends Applet { 

    String fileToRead = "path/to/myfile.txt"; 
    StringBuffer strBuff; 
    TextArea txtArea; 

    public void init(){ 
     txtArea = new TextArea(300, 400); 
     txtArea.setEditable(false); 
     add(txtArea, "center"); 

     // First try the HTML applet parameter, if not use fileToRead variable 
     String prHtml = this.getParameter("fileToRead"); 
     if (prHtml != null) fileToRead = new String(prHtml); 

     // Set up a timer to read the file every 20 seconds 
     Timer t = new Timer(); 
     t.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 
       readFile(); 
      } 
     }, 0, 20*1000); 
    } 

    public void readFile(){ 
     String line; 
     URL url = null; 
     try{ 
      url = new URL(getCodeBase(), fileToRead); 
     } catch (MalformedURLException e) { 
      //handle or do nothing 
     } 

     try { 
      InputStream in = url.openStream(); 
      BufferedReader bf = new BufferedReader(new InputStreamReader(in)); 
      strBuff = new StringBuffer(); 
      while((line = bf.readLine()) != null){ 
       strBuff.append(line + "\n"); 
      } 
      txtArea.append("File Name : " + fileToRead + "\n"); 
      txtArea.append(strBuff.toString()); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

javac "path/to/readTextFile.java"のようなJavaファイルをコンパイルする必要があります。アクセスしようとしているファイルがreadTextFile.classのどこに置かれていても、同じフォルダ内またはそれ以下(ただし、上記ではない)にあることを確認してください。

テキストファイルは多くのクレイジーヒットになります)しかし、あなたのページは狂ったヒットを取得しません。

1

あなたはjqueryのを使用している場合は、このコードを試すことができます。 それはテキストファイルを取得したID textdiv

<script type='text/javascript'> 
var doInterval; 
function getfile() { 
    $.ajax({ 
    url: "file.txt", 
    complete: function(request){ 
     $("#textdiv").html(request.responseText); 
    } 
    }); 
} 
doInterval = setInterval(getfile, 20000); 
</script> 
<div id="textdiv"></div> 
+0

こんにちは、私はこのコードをjqueryを使って実装できますか?私は現在jqueryを持っていないのですか?ありがとう – omega1

+0

タグ '' –

0

でdivの内側に内容を置くウィル私はプロトタイプを示唆しています。それは、箱からの定期的な更新をサポートしています!そのプロトタイプJSスクリプトを取得してページに追加します(hereからダウンロードしてください)。次に、このスクリプトをスクリプトブロックに追加します。

new Ajax.PeriodicalUpdater('logger', 'path/to_file.php', 
{ 
    method:'post', 
    parameters: {sender:'mrigesh',reciever:'browser'}, 
    frequency: 20, 
    decay: 2 
}); 

だから、あなたの「パス/ to_file.phpは、」定期的に更新する必要がある情報の一部を提供します。あなたの好きなように周波数を変更する(私はあなたの質問で20を見た!)を参照してください。 Decayは、同じデータが何度も何度も受信された場合に、サーバーに送信されるリクエストの期間を遅らせる機能です。APIパス:read

関連する問題