【问题标题】:AJAX/PHP get modified contents of fileAJAX/PHP 获取文件的修改内容
【发布时间】:2012-07-25 20:54:41
【问题描述】:

我正在使用 PHP 和 AJAX 请求来获取始终运行的程序的输出,并以 5 秒的间隔将其打印在网页上。有时,此日志文件的大小可达 2mb。如果用户已经至少获得了一次完整的内容,那么 AJAX 请求每 5 秒获取一次该文件的全部内容对我来说似乎是不切实际的。该请求只需要获取用户在之前的请求中没有得到的任何内容。

问题是,我不知道从哪里开始查找用户没有收到的内容。有任何提示、提示或建议吗?

编辑:程序的输出以时间 (HH:MM:SS AM/PM) 开始,之后的所有内容都没有模式。例如,日志文件可能跨越数天,因此文件中可能不只有一个“02:00:00 PM”。我没有编写正在记录的程序,所以我无法修改它打印输出的格式。

【问题讨论】:

  • 是否有正在发送的行号或 ID?如果是这样,则每次用户获取信息时更新最后一个 id。
  • 不,没有任何行号,我编辑了上面的帖子,并提供了有关日志格式的更多信息。谢谢加布里埃尔!

标签: php ajax file


【解决方案1】:

我认为使用 head 请求可能会让您走上正确的道路。

检查这个线程: HTTP HEAD Request in Javascript/Ajax?

如果您使用的是 jquery,这是 ajax 调用中的简单类型更改:

$.ajax({url: "some url", type: "HEAD".....});

就我个人而言,我会根据之前的响应检查文件大小和修改日期,如果已更新,则获取新数据。我不确定你是否可以通过 ajax 只获取文件的一部分,但我确信这可以通过 php 很容易地完成,可能这个线程可能会有所帮助:

How to read only 5 last line of the text file in PHP?

【讨论】:

  • 我忘记了头部请求!所以几乎只需将返回的文件大小与用户已经收到的日志文件的大小进行比较。如果没有,计算请求的偏移量(偏移量然后由 php 处理)?
  • 是的 :) 这就是我要走的路。
  • 谢谢!看起来很简单。该头部请求将对此非常有用。
【解决方案2】:

这取决于您的程序是如何制作的以及它如何打印您的数据,但您可以使用时间戳来减少数据量。如果您有某种 ID,您可能应该在时间戳中使用它们。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 2010-12-09
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多