ファイルが別の以前のバージョンから壊れる場所を効率的に解決するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3955864

  •  08-10-2019
  •  | 
  •  

質問

私は(私の制御を超えたプロセス)と私に常に追加されているファイルを持っています キャプチャー そのファイルごとにx秒。抽出したい 新着 ファイルの内容(以前のキャプチャの間に追加)とそれを使用します。残念ながらファイルには最後に追加されたときに意味するものは何もありませんし、このファイルに書き込むことができないので、私の唯一のオプションは、私がすでに知っているものをファイルに保存し、それを私が持っている新しいバージョンと比較することです。

今、私が知る必要があるのはです どうやって 私はこれをするのが最善です。私はPHPを使用していますが、最も簡単なソリューションは以前のコンテンツを保存してから使用することだと考えました explode() その後に来るものを解決するために、これは(明らかに)ひどい解決策です。ファイルが大量に達すると(1GB+)、処理するのは地獄になるでしょう。

私が持っていたアイデアは、最終キャラクターの位置を保存してそこから作業することです。たとえば、最後のキャラクターが100番目の場合、次のプロセスで100番目のキャラクターから作業しますが、どのようにしてもわかりません。これを行うことができます。

だから私の質問は、これを行うための正しい方法は何ですか? どうやって PHPで(可能であれば)で行うことはできますか?機能や一般的なアイデアは問題ありません。私は実装に適しています。その背後にある理論がわからないだけです。

役に立ちましたか?

解決

ファイルが単純に追加されていると仮定すると、以前のファイルサイズを保存して使用するのが直感的に最も簡単になります 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);

このローリングを初めて入れるには、 0last_position.temp したがって、エラーや難しい感情はありません。

お役に立てれば :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top