代码之家  ›  专栏  ›  技术社区  ›  sam

如何有效地解决文件与其他早期版本的不同之处?

  •  1
  • sam  · 技术社区  · 14 年前

    我有一个不断添加到(我无法控制的过程)的文件,我 捕获 那个文件每隔X秒。我想提取 新的 文件的内容(在以前的捕获之间添加)并使用它。不幸的是,文件没有任何标志,当它最后添加到,我无法写入这个文件,所以我唯一的选择是存储我已经知道的是在文件中,并将其与我的新版本进行比较。

    现在我需要知道的是 怎样 我能做到最好。我使用的是PHP,我认为最简单的解决方案是存储以前的内容,然后使用 explode() 为了弄清楚后面会发生什么,这是一个糟糕的解决方案(非常明显),因为一旦文件达到大量(1GB以上),它将是一个地狱般的过程。

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

    所以我的问题是,正确的方法是什么? 怎样 我可以用PHP来做吗(如果可能的话)?函数或者一个一般的想法都可以,我很适合实现,只是不确定它背后的理论。

    1 回复  |  直到 10 年前
        1
  •  2
  •   mattbasta    14 年前

    假设该文件只是附加到,那么直观地说,存储以前的文件大小和使用该文件是最容易的。 fseek() 或的偏移参数 file_get_contents 移动到文件的旧版本结束的位置。即。:

    $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_position.temp 所以没有错误或不好的感觉。

    希望这有帮助:)