首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >刷新页面中的外部内容.txt文件

刷新页面中的外部内容.txt文件
EN

Stack Overflow用户
提问于 2012-04-16 19:00:57
回答 5查看 3.5K关注 0票数 0

我已经看过类似的问题,但还没有完全找到我正在寻找的东西…

我有一个用PHP编写的网页,我需要显示外部.txt文件的内容,我需要刷新一次,比如说,20秒,因为.txt文件的内容定期变化。

我已经能够通过放入一个IFRAME并使用PHP include来显示文件的内容来实现这一点。然后,我每隔20秒刷新一次包含页面。

这工作得很好,除了,IFRAME刷新正在对我的网站统计造成严重破坏,因为刷新的数量,ehcih计数对页面浏览量。

我可以使用,比如说,AJAX或其他东西来做这件事吗?我敢肯定他们可能是另一种方式来做这件事,而不会严重影响我的统计数据,也不会对服务器造成太大的负载?

请提供尽可能多的具体说明,因为我已经花了几天的时间来获得我已经拥有的东西!

首先要感谢大家!

EN

回答 5

Stack Overflow用户

发布于 2012-04-16 19:09:01

我知道您要求使用Ajax/JavaScript,但是Java applet可以在大多数桌面浏览器上使用,而这个任务在Java中会非常简单,所以我给出了一个使用Java applet的示例。

代码语言:javascript
代码运行次数:0
运行
复制
// 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>

您将需要像cmd.exe中的javac "path/to/readTextFile.java"一样编译java文件

代码语言:javascript
代码运行次数:0
运行
复制
// 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的同一文件夹或以下(但不在上面)中

请注意,文本文件将获得同样多的疯狂点击(但这是没有办法的),但您的页面不会获得疯狂的点击。

票数 1
EN

Stack Overflow用户

发布于 2012-04-16 19:09:33

如果您正在使用jquery,您可以尝试以下代码:它将获取文本文件,并将内容放入带有id textdiv的div中

代码语言:javascript
代码运行次数:0
运行
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2012-04-16 19:08:33

你当然可以在PHP中使用像Comet/Long Polling这样的东西,但是正如the accepted answer to this question提到的,当使用Apache作为服务器时,有一些注意事项。

如果您不局限于PHP,您可以使用socket.io,它非常适合这项事业。此外,如果您没有太多的客户端,Comet仍然适合您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10172871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档