Эффективность fopen () с опцией 'a' в PHP - PullRequest
3 голосов
/ 13 марта 2011

Если я напишу fopen($myfile, 'a'), а $myfile - очень большой файл, придется ли серверу читать весь файл, чтобы вернуть указатель на конец файла?Или он быстро находит указатель на конец файла и затем возвращает его?

В связанной заметке, когда я затем использую fwrite(), я предполагаю, что он не перезаписывает весь файл, верно?Это просто добавляет вещи?

Я в основном пытаюсь выяснить, fopen() с опцией 'a', и fwrite() - O (1) или O (n), где n - длинасуществующего файла.

Ответы [ 3 ]

4 голосов
/ 13 марта 2011

Фактическая сложность зависит от сложности базовой файловой системы, но сам PHP не будет зацикливаться или читать весь файл, он будет стремиться к концу и начнет писать оттуда.При открытии файла в приложении append, он не будет удален fwrite (вы можете легко попробовать это, чтобы увидеть, как он работает).

2 голосов
/ 13 марта 2011

(Связано)
Обратите внимание, что вы также можете использовать file_put_contents вместо fopen/fwrite/fclose для добавления к файлам - если вы так сильно обеспокоены скоростью:

file_put_contents($filename, $data, FILE_APPEND);

Это немногоболее атомарный и не требует блокировки.

1 голос
/ 13 марта 2011

Нет, fopen не нужно читать весь файл только для того, чтобы перейти к концу. Все, что нужно, - это простой поиск.

...