Создать загружаемый CSV из веб-поиска, используя PHP и MySQL
Я пытаюсь создать CSV-файл, который может быть загружен пользователем без постоянного сохранения данных на сервере.
Я использую MySQL и PHP для этой страницы. Я получаю данные в правильном формате для отображения ("эхо") на веб-странице, но не могу получить файл для генерации / загрузки... возможно, я что-то упускаю или ищу в неправильном месте, но любая помощь будет полезна!
Я пробовал несколько скриптов, как своих, так и других, которые я нашел, но один из них у меня есть ниже:
$file = 'export';
$colresult = mysql_query("SHOW COLUMNS FROM ".$tbl_name."");
if (mysql_num_rows($colresult) > 0) {
while ($row = mysql_fetch_assoc($colresult)){
$csv_output .= $row['Field'].", "; $i++; } } $csv_output .= "\n";
$csvresult = mysql_query($sql);
while ($rowr = mysql_fetch_row($csvresult)) {
for ($j=0;$j<$i;$j++) { $csv_output .= $rowr[$j].", ";
}
$csv_output .= "\n"; }
$filename = $file."_".date("Y-m-d_H-i",time()).".csv";
header("Content-type: application/csv");
header("Content-disposition: attachment;filename=".$filename.".csv");
readfile("../documents/csv/".$filename.".csv");
$fp = fopen($filename, 'w');
foreach($csvret as $csvret){
fputcsv($fp, $csvret);
}
print $csv_output;
print $filename;
Спасибо!
1 ответ
Решение
Вам нужно будет передать несколько заголовков, чтобы веб-браузер распознал файл как "загружаемый":
<?php
header('Content-Description: File Transfer');
header("Content-Type: application/csv");
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
Просто добавьте этот код вместо:
print $csv_output;
print $filename;