2016-12-21 70 views
0

我目前創建和輸出一個CSV如下保存CSV:1.4.3和PHP

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=file.csv'); 
header("Cache-Control: no-store, no-cache"); 

$df = fopen('php://output', 'w'); 
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF)); 
foreach ($csvLines as $csvLine) { 
    fputcsv($df, $csvLine); 
} 
exit; 

不過,我想不僅輸出,而且這個文件保存到磁盤。我怎樣才能將$df寫入文件?

注意改善我的生成CSV建議,歡迎:)

+1

'$ DF =的fopen('/路徑/要/磨片瀏覽器re/you/want/the/file/on/disk.csv','w');'而不是打開'php://輸出';然後在'exit'之前立即使用'readfile('/ path/to/where/you/want/the file/on/disk.csv')將它發送給瀏覽器 –

+0

不要編寫UTF-8 BOM。這是[不需要](https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8),很多時候它會產生更多的傷害。 – axiac

+0

@axiac當試圖讓CSV與CSV一起工作時(這是一種非常常見的情況),這種智慧並不適用。 (雖然正確支持Excel與CSV不幸的是更復雜...) – deceze

回答

1

最簡單的答案是寫入文件,而不是php://output,和然後直接發送文件到使用readfile()

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=file.csv'); 
header("Cache-Control: no-store, no-cache"); 

$df = fopen('/path/to/where/you/want/the/file/on/disk.csv', 'w'); 
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF)); 
foreach ($csvLines as $csvLine) { 
    fputcsv($df, $csvLine); 
} 
readfile('/path/to/where/you/want/the/file/on/disk.csv'); 
exit; 
0

簡單地寫兩個文件指針:

$out = fopen('php://output', 'w'); 
$file = fopen('somefile.csv'); 

fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF)); 
fprintf($file, chr(0xEF).chr(0xBB).chr(0xBF)); 

foreach ($csvLines as $csvLine) { 
    fputcsv($out, $csvLine); 
    fputcsv($file, $csvLine); 
} 

exit;