2012-06-06 4 views
7

Я хотел бы сгенерировать csv-файл с данными, которые я получаю, запрашивая базу данных. Затем браузер должен попросить пользователя загрузить файл. Проблема заключается в том, что для функции readfile требуется имя файла, а не дескриптор, но я не могу найти функцию для получения имени файла этого временного файла. Я думаю, что есть лучшие способы сделать это, но я не могу их найти.Как экспортировать динамически созданный временный файл 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

вы используете MySQL? –

+0

yes @khaled_webdev – Riesling

+0

Вы можете genereate файл непосредственно из запроса mysql –

ответ

13

Вы ищете rewind сбросить указатель файла в начало файла, а затем fpassthru, чтобы вывести все содержимое файла.

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

Другим решением является использование tempnam для создания уникального файла, который не удаляется при закрытии. Не забудьте удалить его вручную, когда вы закончите с ним.

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

вот что я искал, работает как шарм, спасибо – Riesling

2

Использование

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

И у вас есть имя файла тоже.

+0

Не забудьте удалить файл после. Но решение Эмиля кажется лучше. – Zoka

0

из 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 

и удалить его по требованию

переопределять сепараторы и другие пары, как вам нужно

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