Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用文件中的文本实时更新页面_Javascript_Php_Html_Ajax - Fatal编程技术网

Javascript 使用文件中的文本实时更新页面

Javascript 使用文件中的文本实时更新页面,javascript,php,html,ajax,Javascript,Php,Html,Ajax,试了5个小时后,我就来找你了 我需要创建一个页面,它将自动更新自己,并在文件更改时显示文件内容。假设我们有foo.txt,它在不断更新。我不希望页面每n秒重新加载一次。此外,我只需要显示此文件的最后30行。我想到了这个: <?php //live.php $handle = popen("tail -30l foo.txt 2>&1", 'r'); while(!feof($handle)) { $buffer = fgets($handle); echo

试了5个小时后,我就来找你了

我需要创建一个页面,它将自动更新自己,并在文件更改时显示文件内容。假设我们有foo.txt,它在不断更新。我不希望页面每n秒重新加载一次。此外,我只需要显示此文件的最后30行。我想到了这个:

<?php   //live.php
$handle = popen("tail -30l foo.txt 2>&1", 'r');
while(!feof($handle)) {
    $buffer = fgets($handle);
    echo "$buffer<br/>\n";
    ob_flush();
    flush();
}
pclose($handle);
?>

成功显示文件最后30行但未更新的内容。这就是我被困的地方——我不知道如何完成以下任务:

  • 检查文件更新
  • 文件更改时显示live.php

  • 我可以使用Ajax更新功能吗?

    有两种方法

    1)联营 这将主要由前端完成。你需要检查后,每一秒从前端它有任何变化,它的数据。如果检测到更改,则从服务器发送新数据,并用新数据替换当前数据。如果未发现任何变化,则无需更换

    优点:

    i) Page will only refresh if there is any change on server.
    ii) Client is responsible for detection manily.
    
     i) Only data will send if there is change in data. No extra network calls.
    
    2)推动 这主要可以通过服务器来实现。只要文件中有任何更改,就在PHP端检测(通过CRON作业)。通过套接字将数据发送到前端

    优点:

    i) Page will only refresh if there is any change on server.
    ii) Client is responsible for detection manily.
    
     i) Only data will send if there is change in data. No extra network calls.
    
    这篇文章会有帮助


    首先,您希望何时显示更新后的最后三行?。立即或在一段时间后?尽快,所以立即。现在,只有通过ajax调用从服务器检查更改,才能执行此操作。只有在有任何变化时才上传页面。所以我建议做一件事,创建当前30行的哈希,并将其发送到服务器,然后将该哈希与服务器端当前的30行进行比较。如果有更改,将新的30行发送回,如果没有,则只发送带有假值的标志。如果您想要其他方式,则需要创建从服务器到前端的套接字连接。如果要检查的文件(使用CRON作业)有任何更改,则通过套接字将其发送到前端并显示。检查文件时间戳或大小是否已更改不是更简单吗?事实上,我可以想象代码应该做什么,我只是不知道应该如何编写:(是的,不管怎样,你喜欢在服务器端检查更改。