W3docs

file()

Функция file() в PHP читает содержимое файла и сохраняет его в array. Узнайте синтаксис, флаги и примеры использования.

Что такое функция file()?

Функция file() читает весь файл в array, где каждый элемент array — это одна строка файла. Это самый быстрый способ получить строки файла в PHP array за один вызов — вам не нужно открывать дескриптор, перебирать строки с помощью fgets() или закрывать что-либо после.

Используйте file(), когда хотите обработать файл построчно: подсчитать строки, фильтровать строки, читать список значений или разбирать небольшой лог. Если нужна одна большая string вместо array, используйте file_get_contents(); чтобы записать файл за один вызов, используйте file_put_contents().

Синтаксис

file(string $filename, int $flags = 0, ?resource $context = null): array|false
ПараметрОписание
$filenameПуть к читаемому файлу. Может быть локальным путём или URL (если включён allow_url_fopen).
$flagsНеобязательный. Один или несколько флагов, объединённых оператором побитового ИЛИ (|). Смотрите таблицу ниже.
$contextНеобязательный. Ресурс контекста потока, созданный с помощью stream_context_create().

Возвращаемое значение: array строк или false в случае ошибки (например, если файл не существует). По умолчанию каждая строка сохраняет завершающий символ новой строки (\n).

Параметр flags

$flags позволяет управлять способом чтения строк. Комбинируйте их с помощью |:

ФлагДействие
FILE_IGNORE_NEW_LINESУдалять символ новой строки в конце каждой строки.
FILE_SKIP_EMPTY_LINESПропускать пустые строки (наиболее полезно вместе с FILE_IGNORE_NEW_LINES).
FILE_USE_INCLUDE_PATHИскать файл также в include_path.
<?php
// Lines without trailing "\n", and no blank lines.
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

Как использовать функцию file()

Самодостаточный пример, который создаёт файл, читает его с помощью file() и перебирает строки:

<?php

// Create a small file to read.
file_put_contents('myfile.txt', "First line\nSecond line\nThird line\n");

$lines = file('myfile.txt');

foreach ($lines as $lineNumber => $line) {
    echo "Line #{$lineNumber}: " . trim($line) . "\n";
}

Вывод:

Line #0: First line
Line #1: Second line
Line #2: Third line

Ключи array — это номера строк, начиная с нуля, а значения — содержимое строк. Здесь мы используем trim() для удаления завершающего символа новой строки, который file() сохраняет по умолчанию — передача FILE_IGNORE_NEW_LINES даст тот же результат во время чтения.

Подсчёт строк в файле

Поскольку file() возвращает array, функция count() напрямую даёт количество строк:

<?php

file_put_contents('myfile.txt', "alpha\nbeta\ngamma\n");

$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES);

echo "The file has " . count($lines) . " lines.\n";  // The file has 3 lines.

Обработка ошибок

Если файл не удаётся прочитать, file() возвращает false и выдаёт предупреждение. Всегда проверяйте результат перед перебором:

<?php

$lines = @file('does-not-exist.txt');

if ($lines === false) {
    echo "Could not read the file.\n";
} else {
    echo "Read " . count($lines) . " lines.\n";
}

Оператор @ подавляет встроенное предупреждение, чтобы вы могли самостоятельно обработать ошибку.

Подводные камни

  • Весь файл в памяти. file() загружает все строки в array за один раз. Для очень больших файлов откройте дескриптор с помощью fopen() и читайте построчно с помощью fgets().
  • Завершающие символы новой строки сохраняются, если не передать FILE_IGNORE_NEW_LINES. Это приводит к ошибкам при точном сравнении string, например $lines[0] === 'value' вернёт false, если элемент на самом деле равен "value\n".
  • Проверяйте существование файла заранее, если хотите избежать предупреждений: используйте file_exists() или подавите с помощью @.

Заключение

Функция file() — это простейший способ прочитать файл в array строк в PHP. Используйте флаги FILE_IGNORE_NEW_LINES и FILE_SKIP_EMPTY_LINES для получения чистых строк, всегда проверяйте возврат false и предпочитайте fgets() для файлов, слишком больших для хранения в памяти.

Практика

Практика
Какие функции используются в PHP для чтения и записи файла?
Какие функции используются в PHP для чтения и записи файла?
Was this page helpful?