PHP « количество строк в файле

Здравствуйте.

Интересует такой вопрос - можно ли узнать количество строк в файле без его перечитывания.

Делаю обработку больших файлов и хочу сделать индикатор процесса, а для этого мне нужно знать конечную величину (

Перечитывать, хоть и впустую, файл считаю лишней задачей.

1 ответов


Мне известно только 2 метода:
1. Явно с помощью PHP:


function countFileLines($file) {
    return count(file($file));
}
 

2. Но можно не явно, используя возможности ОС сервера (иссесна не Windows):

function countFileLines($file) {
    return trim(exec("wc -l $file"));
}
 
Второй метод платформозависимый.



А чем Вас не устраивает размер файла в байтах? Какая разница, что на что делить: количество обработанных байтов на их общее количество или количество обработанных строк на их общее количество?


Получаете размер файла. Например, 700 байт. Далее в обработчике Вашем, который обрабатывает строки получаете длину строки, далее получаете количество байт в строке и вычисляете процент проделанной работы.
Пример:
Файл 700 байт.
Получаем первую строку 22 байта.
Вычисляем сколько процентов выполнено (22/700)*100=~3% (вроде так проценты считаются)
Получаем вторую строку 200 байт.
Вычисляем сколько выполнено (200/700)*100=~29% Или (222/700)*100=более точное число.
Смысл понятен? Это говорил автор выше, но его мысль была не развёрнута.

А вот такое не в коем случае не используйте. Файл помимо того, что полностью прочитается, так он ещё и в оперативке будет занимать размер больше чем сам файл весит.


count(file($file));
 

Нельзя. Невозможно найти количество вхождений некоего элемента в неотсортированной последовательности кроме как полным сканированием (как точно подметил ErgallM с кубиками)


Символ перевода строки для ПК такой же символ как "Б" или "S".
Чтобы посчитать количество этих символов необходимо прочитать весь файл.


Можно в конце файла поставить __FILE__