使用PHP更新包含文本文件内容的网页

时间:2011-11-08 16:16:05

标签: php javascript

我使用PHP读取.txt文件,并将数据解析到网页。 .txt文件是一个显示我服务器状态的本地日志文件,我现在可以读出最后一行并将其推送到我的网站。

但是,当我的服务器状态发生变化时,.txt文件会在本地更新,但新值永远不会显示在网站上。

我使用HTML5 / Javascript来显示内容,使用PHP来读取文件并解析/清理输入。我附加的代码段显示了我正在使用的PHP文件读取功能,每10秒运行一次。运行此段后,将刷新显示(我使用的是HTML5画布),但数据保持不变。如果我手动刷新页面,则显示仅更新。

是否有可能每隔10秒左右轮询一次这个txt文件,并将最后一行推送到我可以调用的变量中?

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] ?>"
}

3 个答案:

答案 0 :(得分:2)

这不起作用的原因是因为JavaScript在客户端的浏览器中执行,其中PHP在服务器上执行。所以在初始加载中,你得到的是你所期望的,因为在创建页面时,PHP获得了该文件的内容。然而,在那之后,PHP已经不复存在了。

您可能需要考虑使用AJAX定期刷新内容。

答案 1 :(得分:0)

轮询某事不是一个好主意。您需要的是服务器推送新数据或更改的数据。看看这个http://www.zeitoun.net/articles/comet_and_php/start

希望这会有所帮助。

答案 2 :(得分:0)

我遇到了类似的问题,发现浏览器缓存存在问题。您可以通过在Chrome中打开开发人员工具(Windows / Linux = Ctrl + Shift + I,Mac = Cmd + Opt + I)并在那里禁用缓存来检查这一点。

如果这样可以解决问题,那么您需要找到一种解决方法。您可以为每个页面添加一个唯一的虚拟查询字符串,以欺骗浏览器,使其认为它是一个独特的页面。在我的例子中,我使用time()创建了一个时间戳,并将其附加到页面URL。