【发布时间】:2015-06-01 17:29:43
【问题描述】:
我几天来一直在寻找类似的东西,但我找不到任何东西。我对Javascript的了解非常有限,所以我在这里请你们帮助我。
基本上我需要一个 PHP 脚本,它可以实时读取一个巨大的日志 .txt 文件(无需刷新页面),该文件会不断更新。但它应该只读取自从我打开我的 .php 页面以来已写入文件的最新行。这意味着如果我刷新我的页面,它必须从头开始加载新行。
我现在得到了这个(catchlogs.php):
$f = fopen("test.txt", 'r');
$maxLineLength = 1000;
$linesToRead = 1;
fseek($f, -$maxLineLength*$linesToRead, SEEK_END);
$res = array();
while (($buffer = fgets($f, $maxLineLength)) !== false) {
$res[] = $buffer;
}
$content = array_slice($res, -$linesToRead);
for($i = 0; $i < $linesToRead; $i++) {
echo $content[$i]."<br>";
}
还有这个(logreader.php):
<script type="text/javascript">
var auto_refresh = setInterval(
(function () {
$("#logreader").load("catchlogs.php");
}), 1000);
</script>
<div id="logreader"></div>
这会加载最新的 10 行,但每秒对它们进行切片。我不需要有限的行数,我需要一个脚本,从最后一行开始加载行,直到我刷新页面(或关闭它或其他)。
谢谢!
【问题讨论】:
-
使用
ftell()在完成读取运行时获取 EOL 偏移量,将其存储在会话 var 中,然后在下一个 ajax 请求进入时使用fseek()到该位置。 -
请注意,在 jQuery 中使用 $.load() 可能会遇到缓存问题(服务器端和客户端)。因为它默认使用 GET。您应该改用 POST
标签: javascript php file time fopen