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() для файлов, слишком больших для хранения в памяти.