dr.Brain

doctor Brain

мир глазами веб-разработчика

Выгружаем CSV

автоматическая генерация и выгрузка CSV-файла в PHP

dr.Brain

время чтения 2 мин.

Photo by Patrick Lindenberg on Unsplash

Выгрузка данных в формате CSV с помощью PHP требует изменения структуры кода, в отличии от большинства автоматически генерируемых файлов. Для создания CSV-файла потребуются функция header() и поток php://output.

А теперь обратимся к каждому этапу формирования CSV-файла.

Заголовки

Установка заголовков HTTP-запроса необходима при автоматической выгрузке файлов. Таким образом, браузер получает необходимые инструкции и меняет свое поведение. Убедитесь, что функция header() идет в выводе первой и перед ее вызовом отсутствуют HTML-теги и пустые строки.

Необходимо установить следующие параметры заголовка:

// Тип контента 
header('Content-type: application/csv');
// Имя файла
header('Content-Disposition: attachment; filename=myCSV.csv');
// Кодировка
header("Content-Transfer-Encoding: UTF-8");

Обратите внимание на вторую строку кода, приведенного выше - здесь Вы создаете имя для своего CSV-файла.

Формирование CSV

Следующим шагом мы используем функцию fopen() для записи данных не в конечный файл, а в поток вывода:

// Настройка записи в выходной буфер
$f = fopen('php://output', 'a');

Запись и выгрузка данных

На последнем этапе мы запишем в файл фиктивные CSV-данные, закроем файл и выгрузка начнется:

// Запись CSV-данных
fputcsv($f, ["cell1", "cell2", "cell3"]);
// Закрываем файл
fclose($f);
// ... старт выгрузки файла

Финальный код

// Тип контента 
header('Content-type: application/csv');
// Имя файла
header('Content-Disposition: attachment; filename=myCSV.csv');
// Кодировка
header("Content-Transfer-Encoding: UTF-8");
// Настройка записи в выходной буфер
$f = fopen('php://output', 'a');
// Запись CSV-данных
fputcsv($f, ["cell1", "cell2", "cell3"]);
// Закрываем файл
fclose($f);
// ... старт выгрузки файла

Спасибо за внимание.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.