У меня есть массив, и я пытаюсь загрузить его как CSV-файл
мой массив выглядит так
Array(
[0] => Array
(
[Date] => 2017-01-02
[Name] => Asia consumer MC Alpha bmk - risk
[Level] => .333000
)
[1] => Array
(
[Date] => 2017-01-03
[Name] => Asia consumer MC Alpha bmk - risk
[Level] => .333000
))
мой код для преобразования массива в файл
public function DownloadFile($filetype,$Array_data,$content){
$LevelArray = array('Date','Name','Level');
$selected_array = $LevelArray;
if($filetype =='csv'){
$Filename ='Level.csv';
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;
filename='.$Filename.'');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
fputcsv($output, $selected_array);
foreach ($Array_data as $row){
fputcsv($output, $row);
}
fclose($output);
}}
в ответ я получаю вывод по ответу, но этот ответ не преобразуется в тип файла, хотя заголовки указывают на получение файла CSV из него.
Date,Name,Level
2017-01-02,"Asia consumer MC Alpha bmk - risk",.333000
2017-01-03,"Asia consumer MC Alpha bmk - risk",.333000
2017-01-04,"Asia consumer MC Alpha bmk - risk",.333000
Я пытался использовать метод ответа Laravel и многие другие тоже ничего не работает, его заголовки не в состоянии заставить браузер загрузить файл
Заголовки RESPONSE выглядят так
Connection:close
Content-Disposition:attachment; filename=Benchmark-Level.csv
Content-type:text/csv;charset=UTF-8
Host:localhost:8000
X-Powered-By:PHP/5.6.25
Ваш второй заголовок разделен на 2 строки? Это должна быть одна строка без разрывов строк.
header('Content-Disposition: attachment; filename='.$Filename.'');
редактировать
Этот код работает для меня. Я добавил еще один заголовок для принудительной загрузки, но он работает в Chrome с этим дополнительным заголовком или без него. Не могли бы вы попробовать запустить его в разных браузерах? Я думаю, что есть настройки браузера
предотвращение загрузки.
<?php
$selected_array = array('header:col1','header:col2', 'header:col3');
$Array_data = array(
array('row1:col1','row1:col2', 'row1:col3'),
array('row2:col1','row2:col2', 'row2:col3'),
array('row3:col1','row3:col2', 'row3:col3'),
);
$Filename ='Level.csv';
header('Content-Type: text/csv; charset=utf-8');
Header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$Filename.'');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
fputcsv($output, $selected_array);
foreach ($Array_data as $row){
fputcsv($output, $row);
}
fclose($output);
?>
Других решений пока нет …