Изучаем возможности PHP функции file() и её применение

Раздел: PHP -> Функции PHP

Работа с функцией file() в PHP

Основной способ использования функции file() заключается в чтении содержимого файла в массив строк. Каждая строка файла становится элементом возвращаемого массива. Символы перевода строки (\n, \r\n) по умолчанию сохраняются. Этот подход подходит для небольших и средних файлов, когда требуется построчная обработка данных.

$lines = file('example.txt');
print_r($lines);

функции работы с массивом php (функции для работы с массивами в php)

Array
(
    [0] => Первая строка
    [1] => Вторая строка
    [2] => Третья строка
)

функция file php (функция file() в php)

Типичные ошибки:

  • Если файл не существует или не доступен для чтения, file() возвращает false и генерирует предупреждение (E_WARNING). Для подавления ошибки используется оператор @.
  • При больших файлах (сотни мегабайт) происходит загрузка всего содержимого в память, что может превысить лимит memory_limit. В таких случаях применяются потоковые методы (fgets, SplFileObject).
  • Различие в окончании строк (Unix vs Windows) может привести к неожиданным символам в конце строк. Флаг FILE_IGNORE_NEW_LINES удаляет их.

Как удалить символы новой строки из каждой строки?

Флаг FILE_IGNORE_NEW_LINES в качестве второго аргумента убирает завершающие символы перевода строки.

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

функция get php (функция get() в php)

Array
(
    [0] => Первая строка
    [1] => Вторая строка
    [2] => Третья строка
)

функция php выводит данные на экран (вывод данных на экран в php)

Как пропустить пустые строки при чтении?

Комбинация флагов FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES исключает из массива пустые строки.

$lines = file('example.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

статическая функция php (статические методы в php)

Как прочитать файл в бинарном режиме?

Для корректного чтения бинарных данных (например, изображений) используется флаг FILE_BINARY. Однако чаще применяют file_get_contents() для получения строки, а не массива.

$binaryArray = file('photo.png', FILE_BINARY);
// Каждый элемент содержит один байт? Нет – функция вернёт массив строк по разделителю \n, что бессмысленно для бинарных файлов. Рекомендуется не использовать file() для нетекстовых данных.

Php функции даты (функции даты в php)

Использование file() для бинарных файлов ведёт к потере данных, так как функция разбивает файл по символам новой строки. Для бинарных данных правильнее применять file_get_contents() или потоковое чтение.

Как читать файл по URL (удалённый ресурс)?

file() поддерживает URL через обёртку fopen, если включена директива allow_url_fopen. Аналогично локальным файлам, результат - массив строк.

$lines = file('https://example.com/data.txt');
if ($lines === false) {
    echo 'Ошибка чтения URL';
}

функция return php (оператор return в функциях php)

Если хост недоступен или файл не существует, функция возвращает false с предупреждением. Рекомендуется проверять результат и использовать контекст для задания таймаутов.

Как обработать ошибки, если файл не найден?

Для избежания предупреждений можно использовать оператор @ или проверку через file_exists(). Более современный подход - генерация исключения с помощью set_error_handler или проверка возвращаемого значения.

if (file_exists('missing.txt')) {
    $content = file('missing.txt');
} else {
    echo 'Файл не найден';
}

передача функции php (передача функции в качестве аргумента в php)

// Альтернатива с подавлением ошибки
$content = @file('missing.txt');
if ($content === false) {
    // обработка ошибки
}

функция include php (подключение файлов с помощью include в php)

Как прочитать только несколько первых строк?

После получения массива можно использовать array_slice() для выборки нужного количества строк.

$allLines = file('large_file.txt');
$firstFive = array_slice($allLines, 0, 5);
foreach ($firstFive as $line) {
    echo $line;
}

Этот способ всё равно загружает весь файл в память. Для больших файлов эффективнее использовать потоковое чтение с счётчиком.

- Php proc open (функция proc_open в php)
- функция array php (функция array() в php)
- Php arguments (аргументы функций php)

Расширенные примеры использования file()

Пример 1: Комбинирование флагов для чистого массива

Чтение файла, удаление символов новой строки и пропуск пустых строк.

Пример
$config = file('config.ini', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
print_r($config);
Array
(
    [0] => [database]
    [1] => host=localhost
    [2] => user=admin
    [3] => [cache]
    [4] => ttl=3600
)

Пример 2: Чтение CSV-файла с преобразованием в ассоциативный массив

Используется file() для получения строк, затем str_getcsv() для разбора каждой строки.

Пример
$rawRows = file('employees.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$header = str_getcsv(array_shift($rawRows));
$employees = [];
foreach ($rawRows as $row) {
    $data = str_getcsv($row);
    $employees[] = array_combine($header, $data);
}
print_r($employees);
Array
(
    [0] => Array
        (
            [name] => Иван
            [position] => Менеджер
            [salary] => 60000
        )
    [1] => Array
        (
            [name] => Мария
            [position] => Разработчик
            [salary] => 80000
        )
)

Если CSV содержит кавычки или разделители внутри полей, str_getcsv() справляется корректно. Однако при больших файлах (сотни тысяч строк) этот метод может быть медленным; лучше использовать fgetcsv() в цикле.

Пример 3: Чтение удалённого файла с контекстом и таймаутом

Создание потока с настройками HTTP и передача его через третий параметр (контекст) в функцию file().

Пример
$opts = [
    'http' => [
        'method' => 'GET',
        'timeout' => 10,
        'header' => 'User-Agent: PHP Script\r\n'
    ]
];
$context = stream_context_create($opts);
$lines = file('https://api.example.com/data.txt', false, $context);
if ($lines !== false) {
    foreach ($lines as $line) {
        echo htmlspecialchars($line) . '<br>';
    }
}

При использовании контекста важно передавать его третьим параметром; второй параметр (флаги) при этом остаётся по умолчанию (0). Если требуется комбинация флагов и контекста, вторым аргументом передаются флаги, третьим - контекст.

Пример 4: Обработка каждой строки через array_map с сохранением ключа

Прочитать файл, удалить пустые строки, привести каждую строку к верхнему регистру и сохранить индексы.

Пример
$lines = file('text.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$uppercased = array_map('mb_strtoupper', $lines);
print_r($uppercased);
Array
(
    [0] => ПЕРВАЯ СТРОКА
    [1] => ВТОРАЯ СТРОКА
)

Пример 5: Чтение файла конфигурации в формате ключ=значение

Парсинг ini-подобного файла с помощью file() и цикла.

Пример
$raw = file('settings.conf', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$config = [];
foreach ($raw as $line) {
    if (strpos($line, '=') !== false) {
        list($key, $value) = explode('=', $line, 2);
        $config[trim($key)] = trim($value);
    }
}
print_r($config);
Array
(
    [db_host] => localhost
    [db_user] => root
    [debug] => 1
)

Пример 6: Использование file() с потоком php://input для получения тела POST-запроса

В веб-приложениях можно прочитать сырое тело запроса (например, JSON или список строк).

Пример
$inputLines = file('php://input');
$json = implode('', $inputLines);
$data = json_decode($json, true);
print_r($data);
Array
(
    [action] => create
    [id] => 123
)

php://input доступен только для POST-запросов с multipart/form-data или application/x-www-form-urlencoded. Для загрузки файлов через $_FILES эта обёртка не применяется.

Пример 7: Сравнение производительности file() и file_get_contents() на большом файле

Для файла размером 100 MB измеряется время и память.

Пример
$start = microtime(true);
$array = file('huge_log.txt');
$timeArray = microtime(true) - $start;

echo "file(): $timeArray сек, memory: " . memory_get_peak_usage(true) / 1048576 . " MB\n";

$start = microtime(true);
$content = file_get_contents('huge_log.txt');
$lines = explode("\n", $content);
$timeGet = microtime(true) - $start;

echo "file_get_contents + explode: $timeGet сек";
file(): 0.45 сек, memory: 120 MB
file_get_contents + explode: 0.42 сек, memory: 120 MB

Оба подхода потребляют память, пропорциональную размеру файла. Для файлов больше 200–300 MB рекомендуется потоковая обработка с fgets() или SplFileObject.

Функция file() в PHP - comments

En
функция file php (php)