Задать вопрос
meteorlake
@meteorlake
Кодю код, админю домашний сервер с фильмами

PHP file_put_contents дописывает в файл или перезаписывает его?

Здравствуйте, хочу вести кастомный лог типа
file_put_contents('debug.txt', date("H:i:s").' '.$text.PHP_EOL, FILE_APPEND);

интересует, как выполняется это команда? Файл будет считан, добавлен текст и после этого перезаписан файл(удалён и снова создан) или в существующий файл будет дописана одна строка без перезаписи?
Волнует, что если файл будет очень большой это создаст не нужные задержки в выполнении кода
Спасибо
  • Вопрос задан
  • 992 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
DanArst
@DanArst
Гриффиндор в моде при любой погоде!
Если вы читали доку, то там написано, что флаг FILE_APPEND означает, что данные будут дописаны в конец файла вместо его перезаписи.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
file_put_contents(... FILE_APPEND) дописывает содержимое в конец без пересоздания и перечитывания файла
это просто упрощенная запись конструкции
fopen(...,'a');fwrite(...);fclose(...);
если FILE_APPEND не указывать, то используется режим типа w+ (существующие файлы обрезаются в 0 размер, не существующие ошибки не вызывают)
p.s. важное замечание file_put_contents FILE_APPEND работает очень медленно, синхронизируя каждую запись с диском, я помню переписывал код на использование fopen/fwrite плюс там можно гибко задавать буфер записи

upd. на самом деле там используется просто режим 'a' и 'c' и чуть больше проверок
С интересом обнаружил по исходникам что file_put_contents умеет писать array, объединяя без разделителя значения и пропуская ключи.... век живи век учись, не знаю зачем но смешно
Ответ написан
Adamos
@Adamos
Кастомный лог имеет смысл делать в файлах с именем, содержащим дату, в папке, на которую можно натравить logrotate. Тогда вас не особенно будут волновать такие нюансы - не накопите же вы гигабайты лога за день.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы