Как прочитать файл построчно
Короткий ответ
Небольшой файл проще всего прочитать в массив строк:
<?php
$file = sys_get_temp_dir() . '/recipe-lines.txt';
file_put_contents($file, "first\nsecond\nthird\n");
foreach (file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $number => $line) {
echo $number + 1, ': ', $line, "\n";
}Результат:
1: first
2: second
3: thirdБольшой файл
fgets() читает по одной строке и не загружает весь файл в память:
<?php
$file = sys_get_temp_dir() . '/recipe-lines.txt';
file_put_contents($file, "first\nsecond\nthird\n");
$handle = fopen($file, 'r');
$count = 0;
while (($line = fgets($handle)) !== false) {
$count++;
}
fclose($handle);
echo $count;Результат:
3Генератор
Чтение удобно спрятать в генератор и перебирать файл как массив:
<?php
function lines(string $file): Generator
{
$handle = fopen($file, 'r');
while (($line = fgets($handle)) !== false) {
yield rtrim($line, "\r\n");
}
fclose($handle);
}
$file = sys_get_temp_dir() . '/recipe-lines.txt';
file_put_contents($file, "first\nsecond\nthird\n");
foreach (lines($file) as $line) {
echo strtoupper($line), ' ';
}Результат:
FIRST SECOND THIRD