Обязательно закройте указатель файла после того, как вы закончите запись в него.
$filename = $reportof . '.csv';
header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$f = fopen('php://output', 'w');
ob_clean();
$delimiter = ';';
fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($Reports as $line) {
fputcsv($f, $line, $delimiter);
}
ob_flush();
fclose($f);
die();
Edit:
Добавлены методы ob_clean()
и ob_flush()
, это просто для того, чтобы убедиться, что все выходные данные в вашем буфере очищены, это можно пропустить, если ничего не было записано до
Редактировать 2:
Добавлены фиктивные данные для проверки, это работает.
header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="test.csv";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$f = fopen('php://output', 'w');
$delimiter = ';';
$rs = [
[1, 'some name1', 'open', date('c'), 1],
[2, 'some name2', 'closed', date('c'), 2],
[3, 'some name3', 'open', date('c'), 3],
[4, 'some name4', 'closed', date('c'), 4],
[5, 'some name5', 'open', date('c'), 5],
];
fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($rs as $line) {
fputcsv($f, $line, $delimiter);
}
fclose($f);
die();
Это автоматически загружает CSV: