Создайте и загрузите файл CSV в один скрипт [дубликаты]

0

Я хочу создать и загрузить CSV файл в одном скрипте.

До сих пор я избегал недостатка знаний, предварительно создавая файл с заданием cron, а затем загружая файл по ссылке.

У меня есть это:

$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to mysql');

$get_members_csv_query = "SELECT * FROM members";
$get_members_csv_result=$conn->query($get_members_csv_query, MYSQLI_STORE_RESULT);

$all_members_array = array();

while ($get_members_csv_array = $get_members_csv_result->fetch_assoc())
{
    array_push($all_members_array, $get_members_csv_array);
}


$file = fopen('members.csv', 'w');                              
  fputcsv($file, array('email', 'First Name', 'Surname', 'Gender','DOB','Registered On','Country','paid','Children','Wants Kids','Relationship','Body Type','Height','Smoke','Drink','Phone','Region','Religion','Community'));      
  foreach ($all_members_array as $row) {
        fputcsv($file, $row);              
  }


      exit(); 

Это успешно создает файл, но что мне нужно добавить в скрипт, чтобы он автоматически загружал CSV файл после его создания?

Я попытался поставить это на старте, если скрипт:

header("Content-type: text/csv");
  header("Content-Disposition: attachment; filename=members.csv");
  header("Pragma: no-cache");
  header("Expires: 0");

Но он загружает файл до того, как скрипт завершит (или даже начнет) создание файла.

Я пытаюсь помещать заголовки в конец скрипта и использовать ob_start() наверху - тот же результат.

благодаря

Теги:
http-headers
download

2 ответа

0

Попробуйте: Из строки exit() измените на:

exit(dnl("members.csv"));//call dnl function

то на той же странице напишите функцию dnl:

function dnl($fn){
 // Send Header
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");;
    header("Content-Disposition: attachment;filename=$fn"); 
    header("Content-Transfer-Encoding: binary ");
}

Помните, что контент-тип "приложение/октет-поток" можно изменить, чтобы соответствовать только csv, как вы это делали раньше.

0

Вы никогда не отправляете содержимое файла в браузер. Должен быть:

$file = fopen('members.csv', 'w');                              
fputcsv($file, array('email', 'First Name', 'Surname', 'Gender','DOB','Registered On','Country','paid','Children','Wants Kids','Relationship','Body Type','Height','Smoke','Drink','Phone','Region','Religion','Community'));      
foreach ($all_members_array as $row) {
    fputcsv($file, $row);              
}
fclose($file);

// Download file
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=members.csv");
header("Pragma: no-cache");
header("Expires: 0");
readfile('members.csv');

exit();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню