1

我有一个不断添加到(我无法控制的过程)的文件,我每 x 秒捕获一次该文件。我想提取文件的内容(在我之前的捕获之间添加)并使用它。不幸的是,该文件在上次添加时没有任何可表示的内容,我无法写入此文件,因此我唯一的选择是将我已经知道的内容存储在文件中并将其与我拥有的新版本进行比较.

现在我需要知道的是如何才能最好地做到这一点。我正在使用 PHP,我认为最简单的解决方案是只存储以前的内容,然后用来计算explode()它之后的内容,这(很明显)是一个糟糕的解决方案,因为一旦文件达到大量 (1GB+) 它就会是地狱来处理。

我的一个想法是存储最后一个字符的位置,然后从那里开始工作,例如,如果最后一个字符是第 100 个字符,我会在下一个过程中从第 100 个字符开始工作,但我不确定如何我可以这样做,或者如果它甚至可以使用 PHP。

所以我的问题是这样做的正确方法是什么,我该如何使用 PHP(如果可能)来做到这一点?功能或一般概念都很好,我很擅长实现,只是不确定它背后的理论。

4

1 回答 1

2

假设文件被简单地附加到,直观上最容易存储以前的文件大小并使用fseek()或偏移参数file_get_contents移动到文件的旧版本结束的位置。IE:

$old_position = (int)file_get_contents("last_position.temp");
file_put_contents("last_position.temp", filesize("thebigfile.txt"));

// There might be an off-by-one error here that I'm not paying attention to
$new_entry = file_get_contents("thebigfile.txt", false, "r", $old_position);

为了让这个第一次滚动,你会想要投入0last_position.temp所以没有错误或难过的感觉。

希望这可以帮助 :)

于 2010-10-18T00:11:39.683 回答