Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как прочитать файл построчно

Короткий ответ

Небольшой файл проще всего прочитать в массив строк:

<?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

Функции из этого ответа

  • fgets — Читает одну строку из открытого файла.
  • fopen — Открывает файл для чтения или записи по частям.
  • file — Читает файл в массив строк.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.