Fgetcsv: примеры (PHP)
fgetcsv(resource $stream, ?int $length = null, string $separator = ",", string $enclosure = '"', string $escape = "\\"): array|falseФункция fgetcsv в PHP
Функция fgetcsv() используется в PHP для построчного чтения CSV-файлов. Она автоматически разбирает строки, разделяя их на поля согласно заданным параметрам.
Функция удобна при импорте данных из табличных форматов, обработке экспортированных из электронных таблиц файлов, обмене информацией между системами.
- $stream (обязательный) — указатель на файл, открытый функцией fopen().
- $length (необязательный) — максимальная длина считываемой строки. Значение 0 отключает ограничение.
- $separator (необязательный) — символ-разделитель полей. По умолчанию запятая.
- $enclosure (необязательный) — символ обрамления полей. По умолчанию двойная кавычка.
- $escape (необязательный) — экранирующий символ. По умолчанию обратный слеш (\\)
Примеры применения fgetcsv
Чтение стандартного CSV-файла:
$handle = fopen('data.csv', 'r');
if ($handle) {
while (($row = fgetcsv($handle)) !== false) {
print_r($row);
}
fclose($handle);
}Array
(
[0] => Иван
[1] => Петров
[2] => 25
)
Array
(
[0] => Анна
[1] => Сидорова
[2] => 30
)Работа с файлом, где поля разделены точкой с запятой:
$row = fgetcsv($handle, 0, ';');$row = fgetcsv($handle, 100);Похожие функции в PHP
Разбирает CSV-строку в массив. Удобна при обработке данных из строковых переменных.
Объектно-ориентированный подход к работе с файлами. Класс предоставляет метод fgetcsv().
Библиотека для расширенной работы с CSV. Предлагает больше возможностей для сложных операций.
Аналоги в других языках
Fgetcsv в Python
Модуль csv предоставляет reader и DictReader:
import csv
with open('data.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)Fgetcsv в Javascript
Библиотеки PapaParse или manual parsing:
const csv = `name,age\nИван,25`;
const rows = csv.split('\n').map(r => r.split(','));Fgetcsv в MySQL
Команда LOAD DATA INFILE:
LOAD DATA INFILE 'data.csv' INTO TABLE users FIELDS TERMINATED BY ',';Распространенные ошибки
Проблемы с отображением кириллицы при чтении файлов в Windows-1251:
// Без конвертации
$row = fgetcsv($handle);
// С конвертацией
$row = array_map(function($item) {
return mb_convert_encoding($item, 'UTF-8', 'Windows-1251');
}, fgetcsv($handle));Попытка обработать первую строку как данные:
fgetcsv($handle); // Пропускаем строку заголовков
while (($row = fgetcsv($handle)) !== false) { ... }Изменения в новых версиях PHP
В PHP 8.1 параметр $escape по умолчанию изменен на символ обратной косой черты (\\). Ранее можно было использовать пустую строку для отключения экранирования.
В PHP 7.4 добавлена возможность передачи null в качестве разделителя для автоматического обнаружения.
Расширенные примеры
try {
$handle = fopen('large.csv', 'r');
if (!$handle) throw new Exception('Файл не открывается');
$headers = fgetcsv($handle);
$data = [];
while (($row = fgetcsv($handle, 0, ',', '"', '\\')) !== false) {
if (count($headers) === count($row)) {
$data[] = array_combine($headers, $row);
}
}
fclose($handle);
print_r($data);
} catch (Exception $e) {
echo 'Ошибка: ' . $e->getMessage();
}$content = "\"Многострочное\nполе\","другое поле"\n";
$temp = tmpfile();
fwrite($temp, $content);
fseek($temp, 0);
$row = fgetcsv($temp);
print_r($row);Array
(
[0] => Многострочное
поле
[1] => другое поле
)