Здравствуйте. Есть код: PHP: $file = file('file.txt'); for ($i = max(0, count($file)-101); $i < count($file); $i++) { echo $file[$i]; } Он выводит 100 последних строк файла. Но перед этим он полностью загружает файл и если файл много весит, код просто не обработается из за ограничений PHP. Как вывести только последние 100 строк файла с минимальным потерями? (и желательно минимальным кодом)
@MrSullex, может при таком раскладе пора посмотреть в сторону БД? --- Добавлено --- @Artur_hopf, странный совет )
@Valick ну я могу только гадать что там внутри, но ощущение что какие то логи. вот по этой цитате так думается.
@Artur_hopf, ну разбил ты файлы по дням, за сегодня у тебя прилетело 25 строк, а тебе надо вывести 100. Или еще хуже позавчера 100, вчера 17, сегодня 25, а надо 100 ...
PHP: $lines = []; foreach (new SPLFileObject("file.txt") as $line) { $lines[] = $line; if (count($lines) > 100) array_shift($lines); } echo implode($lines);
PHP: <?php /* * Вывводит последние 100 строк из файла. */ $fileName = "file.txt"; $handle = fopen($fileName, "r"); $posOffset = 0; // Устанавливаем смещение в файловом указателе fseek($handle, $posOffset, SEEK_END); //SEEK_END в конец файла $numLastLines = 100; $newlineCount = 0; do { fseek($handle, --$posOffset, SEEK_END); if (fgetc($handle) == "\n") { $newlineCount++; if ($newlineCount == $numLastLines) { /* Выводит все оставшиеся данные из файлового указателя */ fpassthru($handle); } } } while (ftell($handle) > 1); fclose($handle); От себя не по теме добавлю, если задача парсить логи на *nix-сервере, рекомендую использовать для просмотра последних 100 строк из файла команду: tail -n 100 file.txt https://ru.wikipedia.org/wiki/Tail Консольные утилиты работают не сравнимо быстрее php скриптов, что становиться заметно на больших объемах данных.