File: примеры (PHP)

Работа с функцией file в PHP: от основ до сложных примеров
Раздел: Работа с файлами
file(string $filename, int $flags = 0, ?resource $context = null): array|false
Функция file() в PHP

Функция file() читает содержимое файла целиком и помещает его в массив. Каждый элемент массива соответствует строке из файла. Использование функции актуально при необходимости обработки текстового файла построчно.

Синтаксис
file(string $filename, int $flags = 0, ?resource $context = null): array|false
Аргументы
  • filename - путь к файлу для чтения.
  • flags - комбинация констант:
    • FILE_USE_INCLUDE_PATH - искать файл в include_path.
    • FILE_IGNORE_NEW_LINES - не добавлять символы новой строки в конец каждого элемента массива.
    • FILE_SKIP_EMPTY_LINES - пропускать пустые строки.
    • FILE_NO_DEFAULT_CONTEXT - не использовать контекст по умолчанию.
  • context - ресурс контекста потока, созданный функцией stream_context_create().

Функция возвращает массив строк в случае успеха или false при неудаче.

Примеры использования
Чтение файла в массив
<?php
$lines = file('data.txt');
print_r($lines);
?>
Array
(
    [0] => Первая строка
    [1] => Вторая строка
    [2] => Третья строка
)
Использование флагов
<?php
$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
print_r($lines);
?>
Array
(
    [0] => Первая строка
    [1] => Вторая строка
    [2] => Третья строка
)
Чтение с использованием контекста
<?php
$context = stream_context_create(['http' => ['method' => 'GET']]);
$lines = file('http://example.com/data.txt', 0, $context);
print_r($lines);
?>
Array
(
    [0] => <!doctype html>
    [1] => <html>
    [2] => <head>
    ...
)
Похожие функции в PHP
  • file_get_contents() - читает весь файл в строку. Предпочтительна при работе с файлом как с единым текстом, а не набором строк.
  • fopen() с fgets() - поэтапное чтение файла. Подходит для обработки больших файлов, когда нецелесообразно загружать весь файл в память.
  • SplFileObject - объектно-ориентированный интерфейс для работы с файлами. Обеспечивает больше возможностей для итераций и управления.
Аналоги в других языках

File в Python

with open('data.txt', 'r') as file:
    lines = file.readlines()
print(lines)
['Первая строка\n', 'Вторая строка\n', 'Третья строка\n']
JavaScript (Node.js)
const fs = require('fs');
const lines = fs.readFileSync('data.txt', 'utf8').split('\n');
console.log(lines);
['Первая строка', 'Вторая строка', 'Третья строка', '']

File в MySQL

LOAD DATA INFILE 'data.txt'
INTO TABLE table_name
LINES TERMINATED BY '\n';

В MySQL чтение файла обычно связано с импортом данных в таблицу, а не с получением массива строк.

Типичные ошибки
Отсутствие проверки на ошибки
<?php
$lines = file('missing_file.txt');
foreach ($lines as $line) {
    echo $line;
}
?>
Warning: file(missing_file.txt): Failed to open stream: No such file or directory
Неправильная интерпретация возвращаемого значения
<?php
if (file('empty.txt')) {
    echo "Файл прочитан";
}
?>
Файл прочитан

Для пустого файла возвращается пустой массив, который приводится к true.

Изменения в PHP 8

В PHP 8 функция file() выбрасывает исключение ValueError, если параметр $filename пуст. Ранее выдавалась ошибка уровня E_WARNING.

<?php
file('');
?>
Fatal error: Uncaught ValueError: Path cannot be empty
Расширенные примеры
Обработка CSV-подобного файла
Пример php
<?php
$lines = file('data.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
    $fields = str_getcsv($line, ';');
    print_r($fields);
}
?>
Array
(
    [0] => id
    [1] => name
    [2] => email
)
Array
(
    [0] => 1
    [1] => Иван
    [2] => ivan@example.com
)
Чтение файла с удалением пробелов
Пример php
<?php
$lines = file('data.txt', FILE_IGNORE_NEW_LINES);
$lines = array_map('trim', $lines);
print_r($lines);
?>
Array
(
    [0] => Первая строка
    [1] => Вторая строка
    [2] => Третья строка
)
Чтение только определенных строк
Пример php
<?php
$lines = file('data.txt');
$neededLines = array_slice($lines, 2, 3); // строки с индексами 2,3,4
print_r($neededLines);
?>
Array
(
    [0] => Третья строка
    [1] => Четвертая строка
    [2] => Пятая строка
)
Подсчет статистики по файлу
Пример php
<?php
$lines = file('text.txt');
$totalLines = count($lines);
$emptyLines = count(array_filter($lines, function($line) {
    return trim($line) === '';
}));
$nonEmptyLines = $totalLines - $emptyLines;
echo "Всего строк: $totalLines, непустых: $nonEmptyLines";
?>
Всего строк: 15, непустых: 12

PHP file function comments

En
File Reads entire file into an array