Я пытаюсь создать файл CSV на лету, а затем заставить браузер загрузить его.
Создание файла просто и не содержит ни одной пустой строки, я проверил это. Другая проблема может быть <?php
теги, но у меня нет пустых строк после него, и у меня должен быть закрывающий тег, потому что у меня есть HTML-код в моем php
файл. Это мое php
код, который делает все это:
if (count($wiersze) > 0 && isset($file_name_whole) && isset($atrybuty)) {
$fh = @fopen($file_name_whole, $atrybuty);
foreach ($wiersze as $row){
if (count($row)>1){
$new_row=array();
foreach ($row as $k=>$v){
$new_row[$k] = '"'.$v.'"';
$new_row_str=implode(',',$new_row)."\n";
}
}
elseif (count($row)==1 && $row[0][0]=='#'){
$new_row_str=$row[0]."\n";
}
else
continue;
fputs($fh, $new_row_str);
}
fclose($fh);
if (file_exists($file_name_whole)) {
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="'.basename($file_name_whole).'"');
header("Content-Length: " . filesize($file_name_whole));
readfile($file_name_whole);
exit;
}
У вас есть какой-нибудь совет, что я делаю не так?
Что помогло мне была эта статья
Ссылка на стек-обмен
Возможно, эти строки «зависают» в выходном буфере, который был запущен некоторое время назад. Таким образом, вы можете установить заголовки без старой ошибки «заголовки уже отправлены», но этот контент все равно будет отправлен в браузер при очистке буфера.
Код:
ob_clean();
Других решений пока нет …