2014-11-08 2 views
0

Я хочу создать и загрузить CSV-файл в одном скрипте.Создайте и загрузите 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() наверху - тот же результат.

Благодаря

+1

См. Это [Вопрос] (http://stackoverflow.com/questions/25498403/exporting-data-from-database-in-php-and-the-file-format-for-excel-export-should/25498691 # 25498691) –

ответ

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(); 
0

Попробуйте это: От линии выхода(), изменение в:

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, как вы это делали раньше.

Смежные вопросы