Это проблема учебников из файлов журналов, и я хотел бы предложить другое решение.
Проблема с подходом «удаление строк в начале файлов» заключается в том, что добавление новых строк становится чрезвычайно медленным, как только ему приходится удалять первые строки для каждой новой строки, которую она пишет.
Обычное добавление файла журнала включает запись только нескольких байтов в конце файла в файловой системе (и время от времени ему приходится выделять новый сектор, что приводит к обширной фрагментации - почему обычно это файлы журнала) .
Но большая проблема здесь в том, что вы удаляете строку в начале для каждой записанной строки. Весь файл сначала должен быть считан в память, а затем переписан, что приводит к огромному количеству операций ввода-вывода на жесткий диск (для сравнения). Что еще хуже, решения «разбить на массив PHP и пропустить первые строки» здесь крайне медленные из-за природы массивов PHP. Это не проблема, если ограничение размера файла журнала очень мало или если оно записано не часто, но при большом количестве записей (как в случае с файлами журналов) одну и ту же огромную операцию необходимо выполнять много раз. что приводит к основным недостаткам производительности.
Это можно представить как парковку автомобилей на линии с местом для 50 человек. Парковка первых 50 автомобилей - это быстро, просто въезжайте за машиной впереди и все готово. Но когда вы приближаетесь к 50, и автомобиль в передней части (начало файла) должен быть удален, вы должны довести 2-ую машину до 1-й позиции, с 3 по 2 и так далее, прежде чем вы сможете въехать с последняя машина на 50-й позиции. (И это должно быть повторено для каждой новой машины, которую вы хотите оставить!)
Вместо этого я предлагаю сохранить в разных лог-файлах по дате, а затем сохранить максимум 30 дней назад и т. Д. Таким образом, мы используем файловую систему, которая уже отлично справилась с этой проблемой.