2015-01-11 3 views
2

У меня есть этот PHP-код, который выбирает данные из базы данных и создает файл CSV.Создание CSV и принудительная загрузка файла

Его работа прекрасна, но как я могу принудительно загрузить файл CSV после его создания?

Я добавил заголовки в верхней части страницы, но его не загрузить файл

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=calls.csv'); 

$filename = $SettingsCustomer["company"].'-CallsTariff'.'-'.date("YmdHis"); 

// create a file pointer connected to the output stream 
$output = fopen($_SERVER["DOCUMENT_ROOT"].'/file_dump/price_tariffs/'.$filename.'.csv', 'w'); 

// output the column headings 
fputcsv($output, array('Number', 'Description', 'Per Minute Cost')); 

// loop over the rows, outputting them 
$cost=0; 
$sql="SELECT * from call_costs where sequence < '50' "; 
$rs=mysql_query($sql,$conn); 
while($result = mysql_fetch_array($rs)) { 
    //check for custom costs 
    $sql2="SELECT * from call_costs_custom where parent = '".$result["sequence"]."' AND customer_seq = '".$SettingsCustomer["sequence"]."' "; 
    $rs2=mysql_query($sql2,$conn); 
    if(mysql_num_rows($rs2) > 0) { 
     $result2=mysql_fetch_array($rs); 

     $cost = $result2["cost"]; 
    } else { 
     $cost = $result["retail"]; 
    } 

    fputcsv($output, array($result["number"], $result["description"], $cost)); 
} 
+0

Пользователь может выбрать не загружать. – SuperBear

+0

Что вы имеете в виду? – charlie

+0

Я хочу, чтобы созданный файл просто загрузился. пользователь нажимает ссылку для загрузки файла, он создает его, а затем просто загружает его, чтобы пользователь уже выбрал его для загрузки! – charlie

ответ

3

Чарли, это образец для создания и силы загрузки в CSV-файл. Попробуйте реализовать это в своем коде:

<?php 

$filename = 'test'; 

$filepath = $_SERVER["DOCUMENT_ROOT"] . $filename.'.csv'; 
$output = fopen($filepath, 'w+'); 

fputcsv($output, array("Number", "Description", "test")); 
fputcsv($output, array("100", "testDescription", "10")); 

header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="' . $filename . '.csv"'); 
header('Content-Length: ' . filesize($filepath)); 
echo readfile($filepath); 
+0

, когда я добавляю этот код, я получаю идентификатор ресурса # 346 – charlie

+0

@charlie, я изменил свой ответ. –

+0

просто попробовал это, его не просто эхом Array – charlie

1

Пожалуйста, найдите в следующий раз лучше. Thats каждый раз тот же самый ответ

header('Content-Type: application/octet-stream'); 

текст/CSV является дисплей в состоянии типа содержимого

+0

, что он возвращает Resource id # 346 – charlie

+0

А это эхо ... Вы хотите записать его в файл одновременно? –

+0

его запись файла прекрасна, я хочу загрузить файл, как только он закончит писать созданный файл – charlie

0

Ну что вам нужно, что на вашем конце ...

$file = '/file_dump/price_tariffs/'.$filename.'.csv'; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
readfile($file); 
exit; 

Вы можете удалить get_content_file

+0

ok ive только что добавил, что его еще не загружая файл – charlie

+0

, вы удалили первую ширину заголовка Content-Type текст/CSV? –

+0

хороший ответ, @charlie убедитесь, что вы не эхом что-то перед этой частью –

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