我有一个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个整秒。
对于我想要的东西,是否有修复或更有效/更规范的方法?
修改
如果可以完全跳过该文件并将其输出直接传送到网站,那将会更好......
答案 0 :(得分:1)
不要使用include
,使用readfile
或file_get_contents
,include
有一些缓存机制(无法找到有关它的信息,但是检查下面的例子),因为它必须评估文件,所以速度较慢。
<?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.watch和socket.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