如何检查内容txt文件是否已更改
how to check if content txt file has changed
情况:我用php读取.txt文件的内容,用AJAX将内容加载到div中。javascript每5秒检查一次.txt文件并将内容放入div中。如果.txt文件的内容发生了变化(我在表单提交时就是这样做的),div的内容会在5秒钟后自动发生变化。为此;我使用一个有3个选项的复选框:状态:可用状态:忙状态:已暂停
上面的3行中有一行在.txt文件中。现在的情况是:每5秒检查一次.txt文件,每5秒刷新一次div。如果.txt文件的内容没有改变,有可能不刷新吗?
我怎样才能做到这一点?
javascript下方:
function Ajax()
{
var
$http,
$self = arguments.callee;
if (window.XMLHttpRequest) {
$http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
$http = new ActiveXObject('Msxml2.XMLHTTP');
} catch(e) {
$http = new ActiveXObject('Microsoft.XMLHTTP');
}
}
if ($http) {
$http.onreadystatechange = function()
{
if (/4|^complete$/.test($http.readyState)) {
document.getElementById('ReloadThis').innerHTML = $http.responseText;
setTimeout(function(){$self();}, 5000);
}
};
$http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
$http.send(null);
}
}
Loadtxt.php
<?php
//
$file = "status.txt";
$f = fopen($file, "r");
while ( $line = fgets($f, 5000) ) {
echo $line;
}
?>
div:
<script type="text/javascript">
setTimeout(function() {Ajax();}, 5000);
</script>
<div id="ReloadThis">Default text</div>
计算服务器端文件的HASH。请使用AJAX检查哈希(比如SHA1或MD5),并仅在哈希自上次查找以来发生更改时更新div?
也许服务器上的这个PHP函数可以在这里提供帮助?
string hash_file ( string $algo , string $filename [, bool $raw_output = false ] )
我在这个链接上找到了:http://php.net/manual/en/function.hash-file.php
所以像这样的事情(我无法测试这一点;所以这里非常欢迎编辑):
filehash.php:
<?php
$file = "status.txt";
echo hash_file( "SHA1", $file, $raw_output=false )
?>
设置类似"fileHash"的Javascript变量:
var fileHash;
使用对新PHP脚本的AJAX调用填充:
[...]
$http.open('GET', 'filehash.php' , true);
newFileHash=$http.responseText;
if (fileHash!=newFileHash) { // file changed - so fetch contents
[...]
// check me here: can we just make use of $http twice here ?
$http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
// update div.
document.getElementById('ReloadThis').innerHTML =$http.responseText;
fileHash=newFileHash;
}
setTimeout(function(){$self();}, 5000);
[...]
备选建议:
你的网络服务器可能能够自动返回一个HTTP代码,声明文件自上次请求以来没有更改(通过与你的浏览器标题进行比较),例如HTTP 304:
来自维基百科:
304未修改指示自请求标头指定的版本以来未对资源进行过修改If modified since或如果不匹配。这意味着无需重新传输资源,因为客户端仍然有以前下载的副本。
看起来你已经在GET请求中添加了一个时间戳参数——我认为这会阻止你的浏览器缓存文本文件的旧副本:如果你选择了上面的方法,你应该从GET请求中删除它——因为这会在你每次请求新文档的Web服务器上显示出来。
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 如何从txt文件中获取要在javascript数组中使用的对象
- 将变量传递到.txt文件
- 读取不带fs的txt文件nodejs(来自url)
- 用javascript或html5编辑txt文件
- 如何使用jQuery获取txt文件数据中的行数
- 将.txt文件放入文本区域
- 读取外部local.txt文件以将数据加载到数组中
- 使用Javascript动态读取和显示txt文件
- JSON请求返回.txt文件
- 使用 javascript 读取.txt文件
- 如何遍历.txt文件并在javascript中获取值
- 读取一个动态填充的txt文件
- p5.js:如何根据HTML页面使我的草图加载不同的.txt文件
- HTML-从javascript中的URL位置读取.txt文件
- 使用javascript从浏览器打印XML或TXT文件
- 将外部文本从.txt加载到html文件
- 如何永久更改外部文件.txt
- 在AngularJS中使用特定数量的文件txt进行过滤
- Javascript 从本地文件.txt创建数组