Я пытаюсь экспортировать данные из базы данных в .csv. Когда я нажимаю ссылку на экспорт, я не вижу окна сохранения в браузере очень долго, если данных достаточно много. Это может быть довольно запутанным, если сценарий выглядит как повешение в течение некоторого времени, и через довольно долгое время можно увидеть окно сохранения в браузере. код что-то вроде этого в контроллере:Почему не загружается окно в браузере долгое время, когда я экспортирую данные
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$fileName = $list->list_name . '.csv';
$this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');
$contacts = new Contact();
$contacts->export($listId);
Метод экспорта читает записи по одному и печатает это что-то вроде этого:
$fp = fopen('php://output', 'w');
foreach ($mongodbCursor as $subscriber) {
$row = formRow($subscriber);
fputcsv($fp, $row);
}
я вижу на некоторых приложениях, которые экономят winow появляются почти сразу и когда вы нажимаете «Сохранить», вы видите ход загрузки.
Я попытался заменить:
$this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');
с этим:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="'. $fileName . '"');
Это не помогло до сих пор. Интересно, можно ли отправлять заголовки, прежде чем все данные будут считываться один за другим из базы данных? Благодарим вас за помощь.
Какой максимальный размер файла вы экспортировали следующим образом? – Oleg
Я тебя не понимаю прямо сейчас, какой импорт? Этот кусок кода состоит в том, чтобы выдать cvs, тот же сценарий написал несколько строк над ним. Максимальный размер файла неограничен (в моем случае он считывает записи в базе данных, никаких проблем даже при экспорте тысяч записей одновременно) – peipst9lker
Pardon, я имел в виду экспорт, я его исправляю. – Oleg