Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Загрузить файл csv через php

#php #csv


При нажатии на кнопку необходимо сформировать и загрузить файл с данными в формате csv.

Есть такая функция function getCsvFile(...)

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

Подскажите, пожалуйста, что не так.

Заранее благодарен

$now = gmdate("D, d M Y H:i:s");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=test.csv");
header("Content-Transfer-Encoding: binary");

//$array = $this->getLinks(...);
$titles = array("id", "Test");
ob_start();
$df = fopen("test.csv", "w");
fputcsv($df, $titles, ';');

$data = array(
          array(1,2),
          array(1,2),
          array(1,2),
          array(1,3)
        );

foreach ($data as $row) {
   fputcsv($df, $row, ';');
}
fclose($df);

    


Ответы

Ответ 1



По идее Content-Type должен быть один. И в значении для csv надо указать text/csv header("Content-type: text/csv"); Пример - тут.

Ответ 2



Разобрался. Возможно частично проблема была связана с заголовками, но также с запуском самой функции. У меня эта функция запускается через ajax, поэтому необходимо было при передаче значений дополнительно добавить success: function(data) { document.location.href="..."; }

Комментариев нет:

Отправить комментарий