1

フォーム設定に基づいて、かなり大きなフォームをテキスト ファイルに書き込む機能があります。

簡単に言えば、関数の出力を単一のファイルと比較し、宛先ファイルが出力と異なる場合にのみ実行 (ファイルの書き換え) を行いたいと考えています。ご想像のとおり、これはパフォーマンスの問題です。

ところで、それは実行可能ですか?

プロセスは、いくつかのフォームに記入することです:

  1. いくつかの「特定の」選択されたオプションを含む単一のファイルが書き込まれます

  2. 一部の「非特定」オプションは、必ずしもファイルに何も書き込まない場合があります。

フォームはいつでも更新できるため、さまざまなオプションに基づいてファイルの内容が拡大または縮小する場合があります。

ポイント#1にいる場合にのみ、ファイルを書き直す必要があります。ポイント 2 では、何も書き込まないでください。

これは私が試したものです:

if ($output != file_get_contents($filepath)) {
  // save the data
}

しかし、私はこれで非常に実行の遅れを感じました。

ここでほぼ同様の問題を見つけました:file_get_contents()を使用して2つのファイルを比較できますか?、しかし、私の問題は異なります。私は、プロセスの結果を、単に以前のプロセスの結果である既存のファイルと比較しています。そして、それらが異なる場合にのみファイルを書き換えます。

ところで、フォームに機密データはありません。どんなヒントでも大歓迎です。

ありがとう

4

3 に答える 3

1

ファイル全体を文字列と比較する(文字列だと思いますよね?)唯一の方法は、ファイル全体を読み取って比較することです。パフォーマンスを向上させるために、 Explosion Pillsが私の前に言ったように、ファイルを1行ずつ読み取り、最初の別の行で停止することができます。

ファイルが非常に大きく、パフォーマンスをさらに向上させたい場合は、ハッシュ処理を行うことができます。

  • 出力を生成します。たとえば、$output
  • 計算md5($output)してに保存し$output_md5ます。
  • 保存されているものと比較$output_md5してください。たとえば、ファイルに保存されているものと比較してくださいoutput.md5
  • それらは等しいですか?
    • はいの場合、何もしません。
    • そうでない場合は、に保存$outputします。output.txt$output_md5output.md5
于 2012-05-24T16:09:52.510 に答える
1

sha1_file($file)他の投稿にある関数と関数の組み合わせをいつでも試して、sha1($string)その同等性を確認できます。

于 2012-05-24T16:13:54.473 に答える
1

ファイル全体をメモリにロードするよりも、1 行ずつ読み取り ( fgets)、入力文字列と比較する方が高速な場合があります。文字ごとに小さくすることもできますが、それはやり過ぎだと思います。

于 2012-05-24T16:05:43.660 に答える