Php 如何有效地计算出文件从另一个早期版本中断的位置?

Php 如何有效地计算出文件从另一个早期版本中断的位置?,php,file,file-manipulation,Php,File,File Manipulation,我有一个不断添加到(我无法控制的进程)的文件,我每x秒捕获一次该文件。我想提取文件的新内容(在上一次捕获之间添加)并使用它。不幸的是,该文件没有任何表示它上次添加到何时的内容,我无法写入该文件,因此我唯一的选择是将我已经知道的内容存储在该文件中,并将其与我拥有的新版本进行比较 现在我需要知道的是我如何才能最好地做到这一点。我使用的是PHP,我认为最简单的解决方案是只存储前面的内容,然后使用explode()来计算后面的内容,这(非常明显)是一个糟糕的解决方案,因为一旦文件达到大数(1GB+),处

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

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

我的想法是存储最后一个字符的位置,然后从那里开始工作,例如,如果最后一个字符是第100个字符,那么我将在下一个进程中从第100个字符开始工作,但我不确定如何才能做到这一点,或者使用PHP是否可行


所以我的问题是什么是做这件事的正确方法,我如何用PHP做这件事(如果可能的话)?函数或总体思路都很好,我很擅长实现,只是不确定它背后的原理。

假设文件只是附加到文件中,直观地说,存储以前的文件大小并使用
fseek()会更容易
文件\u获取内容的偏移量参数
移动到文件旧版本结束的位置。即:

$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);
要第一次启动此功能,您需要将
0
置于
last\u位置.temp
,这样就不会出现错误或不愉快的感觉


希望这有帮助:)

这看起来正是我需要的,谢谢!将文件大小用作新文件位置的准确性有多高?它会保证每次都处于相同的位置吗?
filesize()
应该生成文件的精确大小(以字节为单位)。我不能说它将如何处理多字节字符的编码,但我认为它将按预期工作。