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, непустых: 12PHP file function comments
En
File Reads entire file into an array