Как создать csv файл на лету и вернуть на скачивание?

Добрый день.

При нажатии на кнопку должен скачиваться csv файл.

Делаю через ajax. Каким методом надо делать? GET или POST?

Вот функция в контроллере, на которую идет запрос по ajax
public function uploadToFile() {
....
       $orders = Order::where($arFilter)->orderBy('id', 'desc')->get();

        header('Content-Description: File Transfer');
        header("Cache-Control: public");
        header('Content-Disposition: attachement;filename="test.csv";');
        header('Content-Type: application/csv; charset=UTF-8');

        $titles = array("id", "От куда", "Куда");

        ob_start();
        $df = fopen("php://output", 'w');
        fputcsv($df, $titles, ';');
        foreach ($orders as $k => $order) {
            $arTmp = array($k, $order->fromCity, $order->toCity);
            fputcsv($df, $arTmp, ';');
        }
        fclose($df);
        $str = ob_get_clean();
}


В $str получаю текстовое отображение файла.
Как мне его вывести на скачивание?
  • Вопрос задан
  • 1278 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
https://laravel.com/docs/5.8/responses#file-downloads

return response()->streamDownload(function () {
    echo $str;
}, 'test.csv');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@green_goo
Убрать ob_start(); и $str = ob_get_clean();
Ответ написан
Комментировать
@raxweb
Вот простой скрипт: aceweb.ru/articles/php/export-csv.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы