Подтвердить что ты не робот

Что быстрее? file_put_contents(); Еореп(); FWRITE(); fclose();?

Что лучше? У меня есть собственный журнал MySQL, поэтому он имеет около 90 МБ, но я не уверен, какой из них я должен использовать. Он открывает файл EVERYTIME для выполнения запроса.

Что быстрее?

4b9b3361

Ответ 1

В соответствии с в этой статье fwrite() быстрее smidgen. (Ссылка на Wayback Machine, потому что сайт больше не существует.)

Я предполагаю, что file_put_contents() - это просто оболочка вокруг этих трех методов, так что вы потеряете накладные расходы.

EDIT: Этот сайт имеет ту же информацию.

Ответ 2

Эта функция идентична вызовам fopen(), fwrite() и fclose() последовательно для записи данных в файл.

Проверьте документы: http://php.net/manual/en/function.file-put-contents.php

Шон

Ответ 3

Зависит от вашего прецедента. Я открыл файлы, которые были выше .5 ГБ, и я, конечно, не хотел использовать file() или file_get_contents(); И file_put_contents не могли работать, потому что мне тоже нужно было прочитать файл.

Если вы действительно просто заинтересованы в добавлении файла без чтения, это не имеет особого значения; если вы пытаетесь прочитать целый файл в памяти (или записать целый файл из памяти), то это также не имеет особого значения - коэффициент усиления скорости, как я уже видел, является ошибкой округления.

НО, если вы ожидаете, что эти файлы будут когда-либо расти гигантскими зверями или если вам нужно только небольшое подмножество количества строк данного файла, я не могу предложить использование fopen (или SplFileObject, что является УДИВИТЕЛЬНЫМ) достаточно сильно - с середины файла с ними легко читать.


Поскольку вы просто регистрируетесь, с другой стороны, я лично считаю это более ясным и более сжатым, просто используя file_put_contents с флагом добавления. Это позволяет всем знать, что происходит, не глядя дважды.

Ответ 4

Как обычно, вы сравнили это? file_put_contents по существу просто оболочка вокруг вызовов 3 f*() в любом случае, так что, в лучшем случае, вы проигрываете, делая один дополнительный вызов функции, но немного выигрывая, имея меньше интерфейсного кода для синтаксического анализа.

Ответ 5

  • Если в запросе есть только одна операция записи для одного файла, file_put_contents лучше, чем fwrite, потому что она обертывает открытые, записывающие и закрывающие функции и так же быстро, как fwrite.
  • Если в запросе есть многозадачность для одного файла, сначала нужно открыть файл, а затем написать много раз, поэтому fwrite быстрее. Но если это очень загруженная система, в которой много "открытых файлов" (ulimit -a | grep "open files" ), будет более разумным выбрать file_put_contents, потому что он держит обработчик файла короче fwrite.