Экспорт любых данных в csv на лету в php

Иногда бывает необходимо сделать выгрузку данных в csv на лету, не сохраняя их на сервере. Данное решение справедливо для относительно небольших объемов данных, т.к. в случае с большими файлами и обрыве связи — файл придется скачивать заново.

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

Используем просто задаем заголовки в браузере с помощью функции download_send_headers, не забыв в параметре указать имя файла на выходе и выводим данные с помощью функции array2csv, передав массив в виде параметра.

Пример массива

На выходе получим вот такой результат:

data_export.csv

Напомню, что excel хранит свои данные в кодировке ansi (windows-1251), поэтому, если изначально данные в utf-8 или иной кодировке, то необходимо сделать конвертацию выходных данных, по крайней мере для русских символов или отличных от английских. И разделитель в csv файле должен быть «;», хотя при сохранении файла в самом excel пишется, что разделитель — запятая.