Формирование CSV файлов на PHP.
По структуре CSV файл похож на многомерный массив или таблицу. Он поддерживается Excel-ем и открывается как обыкновенная таблица. А создать его можно прямо в блокноте.
Сейчас мы рассмотрим класс b3rtCSVWriter для удобной генерации CSV-файлов.
- Можно ли создать такой файл нативной функцией fwrite?
- Да, можно. Особенно строки с кавычками, точкой с запятой и переносами строк.
Скачиваем класс b3rtCSVWriter и подключаем к своему проекту:
require 'class.b3rtCSVWriter.php';
Сам класс скачиваем тут
Затем создаём экземпляр этого класса, указываем имя файла, в который будем сохранять результат и "делитель столбцов".
$csvWriter = new b3rtCSVWriter();
$csvWriter->setFilename('./myfile.csv');
$csvWriter->setDelimiter(';');
Можно писать данные, передавая их в виде массива.
$csvWriter->putRecord(['col1'=>'column 1', 'col2'=>'column 2', 'col3'=>'column 3']);
Данный с кавычками и точкой с запятой:
$csvWriter->putRecord([';v;', 'vv', 'v;v;a']);
$csvWriter->putRecord(['"h"', 'hy', 'y"p"g']);
$csvWriter->putRecord(['";r;"', 'gf', 'm;"j";l']);
Многострочные данные:
$csvWriter->putRecord(
['f', 'h
h', 'kk
"
kkk
""
a']);
И даже юникод:
$csvWriter->putRecord(['α', 'α;β', 'α"β"γ']);
Проверяем на ошибки:
if ($csvWriter->getErrors())
{
echo "Errors:\n";
print_r($csvWriter->getErrors());
}
Уничтожаем ненужный более экземпляр класса:
unset($csvWriter);
Готово. В тепличных условиях всё как всегда работает корректно, а когда заказчик начинает слать свои данные - всё часто рушится. Данный класс сведёт к минимуму возможные ошибки записи.