Работа с CSV в PHP: полное руководство
CSV (Comma-Separated Values) — один из самых популярных форматов для обмена табличными данными. В PHP работа с CSV реализована нативно, без установки дополнительных библиотек. В этой статье мы разберём все аспекты: от базового чтения до продвинутой обработки больших файлов.
Основные функции для работы с CSV
PHP предоставляет две ключевые функции для работы с CSV:
fgetcsv()— чтение строки CSV из файлаfputcsv()— запись строки в CSV-формате
Дополнительно используются стандартные функции работы с файлами: fopen(), fclose(), file().
Чтение CSV-файла в PHP
Самый простой способ прочитать CSV — использовать цикл while с fgetcsv():
<?php
$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) {
// Читаем заголовки (первая строка)
$headers = fgetcsv($handle, 1000, ',');
// Читаем остальные строки
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
echo "Имя: " . $row[0] . ", Email: " . $row[1] . "<br>";
}
fclose($handle);
}
?>
Параметры fgetcsv():
handle— дескриптор файлаlength— максимальная длина строки (по умолчанию 0 — без ограничений)separator— разделитель полей (по умолчанию запятая)enclosure— символ кавычек (по умолчанию двойные кавычки)escape— escape-символ (по умолчанию обратная косая черта)
Чтение CSV с кастомными разделителями
Не все CSV используют запятую. Часто встречается точка с запятой (;) или табуляция:
<?php
$handle = fopen('data.tsv', 'r');
while (($row = fgetcsv($handle, 1000, "\t")) !== false) {
print_r($row);
}
fclose($handle);
?>
Запись данных в CSV
Функция fputcsv() автоматически обрабатывает экранирование и кавычки:
<?php
$data = [
['Иван', 'ivan@example.com', 25],
['Мария', 'maria@example.com', 30],
['Петр', 'petr@example.com', 28]
];
$handle = fopen('users.csv', 'w');
// Записываем заголовки
fputcsv($handle, ['Имя', 'Email', 'Возраст']);
// Записываем данные
foreach ($data as $row) {
fputcsv($handle, $row);
}
fclose($handle);
echo "CSV-файл успешно создан!";
?>
Параметры fputcsv():
handle— дескриптор файлаfields— массив полей для записиseparator— разделитель полейenclosure— символ кавычекescape— escape-символ
Экспорт данных в CSV для скачивания
Часто требуется сгенерировать CSV и отдать его пользователю для скачивания:
<?php
$data = [
['Товар', 'Цена', 'Количество'],
['Ноутбук', 75000, 10],
['Мышь', 1500, 50],
['Клавиатура', 3500, 30]
];
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="products.csv"');
$output = fopen('php://output', 'w');
// Добавляем BOM для корректного отображения кириллицы в Excel
fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($data as $row) {
fputcsv($output, $row);
}
fclose($output);
exit;
?>
Обработка больших CSV-файлов
При работе с большими файлами (сотни тысяч строк) важно избегать загрузки всего файла в память. Используйте потоковую обработку:
<?php
function processLargeCSV($filename, $batchSize = 1000) {
$handle = fopen($filename,