2012-04-16 224 views
0

我不得不看看thorugh類似的問題,但還沒有完全找到了我要找...刷新內容外部txt文件

我用PHP編寫的網頁,我需要顯示一個外部.txt文件的內容,並且我需要每隔20秒刷新一次,因爲.txt文件內容會定期更改。

我已經能夠通過將在IFRAME和使用PHP來實現這個包括顯示文件的內容。然後我每20秒刷新一次包含頁面。

這正常EXCEPT的IFRAME刷新都造成嚴重破壞了我的網站統計,因爲刷新量,ehcih計入瀏覽量。

我可以使用AJAX或其他方法來做到這一點嗎?我敢肯定,他們可能是另一種做法,不會嚴重影響我的統計數據,也不會在服務器上造成太多負載?

敬請提供儘可能多的具體說明資訊,儘可能它已經採取了我天acheive什麼,我已經做到了!

非常感謝提前!

+0

難道你不能只是把外部.txt文件直接放在iframe中,這樣客戶端直接從源服務器加載它?如果沒有,你將不得不調整他們的方式,你收集你的統計數據,以便AJAX請求不會「計入瀏覽量」 – DaveRandom 2012-04-16 11:06:22

+0

你正在刷新頁面還是iframe?如果iframe的內容位於同一個域中,則很容易重新加載。 – 2012-04-16 11:32:56

回答

0

可以definitly使用類似彗星/長輪詢與PHP,但作爲the accepted answer to this question提到,在使用例如,當一些注意事項Apache作爲服務器。

如果你不侷限於PHP,你可以使用socket.io,這是非常適合的原因。另外,如果你沒有太多的客戶,Comet對你來說還是可以的。

0

我會基於會話隱藏谷歌Analytics(分析)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> 

您將需要編譯Java文件,就像javac "path/to/readTextFile.java"輸入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(); 
     } 
    } 
} 

將從服務器讀取的文件每20秒。只要確保你試圖訪問的文件位於同一個文件夾或以下(但不是上面),無論你放置在哪裏readTextFile.class

請注意,該文本文件將得到同樣多的瘋狂命中(但theres沒有辦法繞過)但你的網頁不會瘋狂點擊。

1

,如果你使用jQuery你可以試試這個代碼: 它西港島線獲取文本文件並將其放置在div裏面的內容與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 2012-04-16 16:47:12

+0

你可以通過在標籤之間加入這個jquery庫來標記'' – 2012-04-16 17:31:43

0

我建議原型;它支持定期更新,開箱即用!獲取並在您的頁面上包含該原型JS腳本(從here下載)。然後在腳本塊中添加此腳本。

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

所以你的'path/to_file.php'將提供需要定期更新的部分信息。按照你的喜好來看更改頻率(我在你的問題中看到了20個!)。 Decay是一個功能,可以延遲請求發送到服務器的時間段,如果再次收到相同的數據... API路徑:read