3

私が書いfopen($myfile, 'a')$myfileファイルが非常に大きい場合、サーバーはポインタをファイルの最後に戻すためにファイル全体を読み取る必要がありますか? それとも、ファイルの末尾へのポインターをすばやく見つけて、それを返しますか?

関連するメモとして、次に使用するfwrite()と、ファイル全体が上書きされないと思いますよね?それはただのものを追加するだけですか?

私は基本的にfopen()'a'オプションを使用しfwrite()て O(1) か O(n) かを把握しようとしています。ここで、n は既存のファイルの長さです。

4

3 に答える 3

4

実際の複雑さは、基礎となるファイルシステムの複雑さに依存しますが、PHP 自体はファイル全体をループしたり読み取ったりすることはなく、最後までシークしてそこから書き込みを開始します。append more でファイルを開くと、fwrite によってファイルが消去されることはありません (これを試して、どのように機能するかを簡単に確認できます)。

于 2011-03-13T19:02:11.983 に答える
3

(関連)ファイルへの追加の代わりに
使用することもできることに注意してください-速度が非常に心配な場合:file_put_contentsfopen/fwrite/fclose

file_put_contents($filename, $data, FILE_APPEND);

これはもう少しアトミックであり、ロックを必要としません。

于 2011-03-13T19:04:30.243 に答える
1

いいえ、fopen最後にジャンプするためだけにファイル全体を読み取る必要はありません。必要なのは単純なシークだけです。

于 2011-03-13T19:01:08.200 に答える