2012-06-06 28 views
7

Chciałbym wygenerować plik csv z danymi, które otrzymuję, wysyłając zapytanie do bazy danych. Przeglądarka powinna wtedy poprosić użytkownika o pobranie pliku. Problem polega na tym, że funkcja readfile potrzebuje nazwy pliku, a nie uchwytu, ale nie mogę znaleźć funkcji do pobrania nazwy pliku tymczasowego. Sądzę, że są lepsze sposoby na zrobienie tego, ale nie mogę ich znaleźć.Jak wyeksportować dynamicznie wygenerowany tymczasowy plik CSV?

$handle = tmpfile(); 
fputcsv($handle, array('year', 'month', 'product', 'count')); 
header('Content-Type: application/csv'); 
header('Content-Disposition:attachment;filename=LS_export'); 
echo readfile($handle); 
fclose($handle); 
exit(); 
+0

używasz MySQL? –

+0

yes @khaled_webdev – Riesling

+0

można genereate pliku bezpośrednio z kwerendy mysql –

Odpowiedz

13

Szukasz rewind zresetować wskaźnik pliku na początku pliku, a następnie fpassthru do wyjścia całą zawartość pliku.

rewind($handle); 
fpassthru($handle); 

Innym rozwiązaniem jest użycie tempnam wygenerować unikalny plik, które nie są usuwane w stanie zamkniętym. Nie zapomnij usunąć go ręcznie, gdy skończysz.

$name = tempnam('/tmp', 'csv'); 
$handle = fopen($name, 'w'); 
... 
fclose($handle); 
readfile($name); 
unlink($name); 
+0

to, czego szukałem, działa jak urok, dzięki – Riesling

2

Zastosowanie

$tmpfname = tempnam("/", ""); 
$handle = fopen($tmpfname, "w"); 
... 
fclose($handle); 

I masz nazwę pliku zbyt.

+0

Nie zapomnij, aby usunąć plik po. Ale rozwiązanie Emila wydaje się lepsze. – Zoka

0

z mysql

SELECT id, name, email INTO OUTFILE '/tmp/result.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY ‘\\’ 
LINES TERMINATED BY '\n' 
FROM users WHERE 1 

i usunąć go na żądanie

separatorów przedefiniować i innych param jak trzeba

Powiązane problemy