Это будет использовать меньше памяти, так как не загружает весь файл в память:
$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
echo $linecount;
fgets
загружает в память одну строку (если второй аргумент $length
пропущен, он продолжит чтение из потока, пока не достигнет конца строки, чего мы и хотим) , Это по-прежнему вряд ли будет таким же быстрым, как использование чего-то другого, кроме PHP, если вы заботитесь о времени стены, а также об использовании памяти.
Единственная опасность при этом заключается в том, что какие-либо строки особенно длинные (что, если вы столкнетесь с файлом объемом 2 ГБ без разрывов строки?). В этом случае вам лучше делать это в виде кусков и считать символы конца строки:
$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle, 4096);
$linecount = $linecount + substr_count($line, PHP_EOL);
}
fclose($handle);
echo $linecount;