2012-04-16 226 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