Я сталкиваюсь с очень странной проблемой при попытке экспортировать данные и загрузить CSV.
Проблема в том, что когда я набрал около 30 строк, браузер решает отобразить данные, а не загружать их в документ. Сначала я думал, что это были данные, но во время устранения неполадок я проверял, импортируя тот же документ.
Импортируйте его один раз, и моя загрузка запускается и работает отлично. Импортируйте его снова и продублируйте данные, и он внезапно отобразит их, а не загрузит.
Это не большой файл, но можно ли установить какой-либо размер или ограничение на количество символов? Я попытался устранить неполадки несколькими способами, но не совсем уверен, куда идти, так как он работает до определенного предела.
$group = "";
ob_start();
$group = fopen('php://output', 'w');
fputcsv($group, array_keys(rest($groups[0])));
foreach ($groups as $result) {
fputcsv($group, $result);
}
fclose($group);
return ob_get_clean();
$response = $this->getResponse();
$headers = $response->getHeaders();
$headers->addHeaderLine('Content-Type', 'application/download');
$headers->addHeaderLine('Content-Type', 'text/csv');
$headers->addHeaderLine('Content-Disposition', "attachment; filename=\"my_filen.csv\"");
$headers->addHeaderLine('Accept-Ranges', 'bytes');
$headers->addHeaderLine('Content-Length', strlen((string)$group));
return $response;
Если это поможет, я использую Zend Framework 2.
Я думаю, что это может быть связано с настройками сброса в кодировке php.ini или gzip.
Вместо этого вы можете записать его в текстовый файл, а затем принудительно загрузить этот файл.
<?php
$handle = fopen("somefile.txt", "w");
fwrite($handle, "your content here");
fclose($handle);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename('somefile.txt'));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('somefile.txt'));
readfile('somefile.txt');
exit;
?>
Или, если вы можете использовать его на своем сервере:
$content = file_get_contents ($filename);
header ('Content-Type: application/octet-stream');
echo $content;
Других решений пока нет …