1

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

今、私が知る必要があるのは、これを行う最善の方法です。私はPHPを使用していますが、最も簡単な解決策は、以前のコンテンツを保存してから、その後に続くものを解決することであると考えましたexplode()。これは(明らかに)ファイルが多数(1GB以上)になるとひどい解決策です処理するのは地獄です。

私が持っていたアイデアは、最後の文字の位置を保存してからそこから作業することです。たとえば、最後の文字が100番目の場合、次のプロセスで100番目の文字から作業しますが、方法がわかりません私はこれを行うことができます、またはPHPで可能であれば.

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

4

1 に答える 1

2

ファイルが単純に追加されると仮定すると、以前のファイル サイズを保存し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.

お役に立てれば :)

于 2010-10-18T00:11:39.683 に答える