PHP fopen () в качестве APPEND лучше, чем file_get_ (put) content (), чтобы избежать потери логов при множественных запросах? - PullRequest
0 голосов
/ 08 июля 2019

Большинство примеров, которые я видел, чтобы обновить текстовые файлы журналов, кажется, предлагают проверить, существует ли файл, если это так, загрузите его в большую строку с помощью file_get_contents (), добавьте в него новые журналы, а затем запишите его обратно с помощью file_put_contents ().

Возможно, я слишком обдумываю это, но я думаю, что вижу там две проблемы. Во-первых, если файл журнала становится большим, не слишком ли бесполезно расходуется память сценариев для помещения огромного содержимого файла в переменную? Во-вторых, кажется, что если вы выполняли какую-либо обработку между «get» и «put», вы рискуете возможностью того, что несколько посетителей сайта могут обновиться между двумя вызовами, что приведет к потере информации журнала.

Так что для скрипта, который просто вызывается (GET или POST) и завершается после выполнения некоторой работы, не лучше ли будет просто создать свою текущую (более короткую) строку журнала для записи, а затем непосредственно перед выходом (), просто открыть в режиме APPEND и ЗАПИСАТЬ?

Может показаться, что любой из этих подходов может привести к потере данных, если между файлом get и put не было LOCK. В случае file_get / put_contents я вижу, что у метода есть флаг, называемый «LOCK_EX», который я предполагаю, чтобы попытаться предотвратить это возникновение. Но возникает проблема времени, которое требуется для перемещения большого файла в массив и добавления к нему перед обратной записью. Не лучше ли использовать fopen (append) с каким-то «замком» между fopen () и fwrite ()?

Я прошу прощения за то, что DO понимаю, что вопросы "лучший способ сделать что-то" не оценены сообществом. Но, безусловно, является предпочтительным способом решения проблем, которые я поднимаю?

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...