【问题标题】:Updating web page with txt file contents using PHP使用 PHP 使用 txt 文件内容更新网页
【发布时间】:2015-03-26 00:35:47
【问题描述】:

我正在使用 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] ?>"
}

【问题讨论】:

  • 可以用file_get_contents()代替fopenfreadfclose这三行
  • 听起来您在谈论一种服务器推送技术,而 php 做得不太好。您最简单的选择是通过 ajax 定期重新加载状态。

标签: php javascript


【解决方案1】:

这不起作用的原因是 JavaScript 在客户端的浏览器中执行,而 PHP 在服务器上执行。因此,在初始加载时,您将获得预期的结果,因为在创建页面时,PHP 获得了该文件的内容。然而,在那之后,PHP 就消失了。

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

【讨论】:

  • 我明白了,这是有道理的。感谢您的解释,我将研究一些在我的应用程序中使用 AJAX 的示例。
【解决方案2】:

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

希望这会有所帮助。

【讨论】:

  • 谢谢,我会研究那个聊天框的例子,因为它似乎与我想要做的类似。
  • 服务器推送技术的优势在于,您可以在事件发生时向客户端发送数据。不幸的是,php 没有全局状态,也没有事件的概念。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2012-04-27
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多