php:在文件更改时重新加载div

时间:2016-01-31 16:48:11

标签: javascript php html ajax

我有一个Raspberry Pi,它连接了一些按钮,可以更改某个文件中包含的值,比如说“setting.txt”。例如,其内容可能就像

一样简单
42

就是这样。按钮触发一个更改此文件内容的过程(例如42变为43)。

该值需要在Apache2运行的网站上显示,因此我构建了以下内容:

<html>    
    <body>
        <div id="fileContent"></div>
    </body>

    <script type="text/javascript">

     window.onload = function() {
         var $interval = 100;
         setInterval(updateDivByPHP, $interval, "fileContent", "getcontent.php");
     }

     function updateDivByPHP($id, $phpFile) {
         var xmlhttp=new XMLHttpRequest();
         xmlhttp.onreadystatechange = function() {
             if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                 document.getElementById($id).innerHTML = xmlhttp.responseText;
         }

         xmlhttp.open("POST", $phpFile);
         xmlhttp.send();
     }

    </script>    
</html>

其中getcontent.php就像

一样简单
<?php
include "setting.txt";
?>

将刷新间隔设置为100ms后,我预计文件更改后的刷新延迟会合理地缩短,但内容更新需要2个整秒。

对于我想要的东西,是否有修复或更有效/更规范的方法?

修改

如果可以完全跳过该文件并将其输出直接传送到网站,那将会更好......

2 个答案:

答案 0 :(得分:1)

不要使用include,使用readfilefile_get_contentsinclude有一些缓存机制(无法找到有关它的信息,但是检查下面的例子),因为它必须评估文件,所以速度较慢。

<?php
    readfile("setting.txt");
    //echo file_get_contents("setting.txt");
?>

我在apache中使用include做了一些测试:

<?php
    include("test.txt"); //outputs "hi"

    //override "test.txt"
    file_put_contents("test.txt", "bye");

    readfile("test.txt"); //outputs "bye"
    include("test.txt"); //outputs "hi"
?>

如果要在文件被修改后立即发送到浏览器,则应使用websockets和文件观察器。 (您可以使用node.js执行此操作,使用:fs.watchsocket.io

node.js的一些文件监视器模块

答案 1 :(得分:0)

我认为你应该使用Jquery,有些想法:http://api.jquery.com/jquery.post/和php file_get_contents() http://php.net/manual/de/function.file-get-contents.php