2014-01-08 50 views
1

我有值的數組,我想放到一個CSV文件,然後下載:文件在服務器上被填充,但下載的空

$f = fopen("./tokens.csv", "w"); 
foreach ($tokens as $line) { 
     fputcsv($f, array("1"=>$line)); 
} 

fseek($f, 0); 
header('Content-Type: application/csv'); 
header('Content-Disposition: attachement; filename="tokens.csv"'); 
fpassthru($f); 

其結果是,在服務器上的文件被填充了令牌數組的內容,但下載的文件是空的CSV文件。

+1

它是空的或做它包含PHP錯誤消息? –

+1

嘗試以「w +」模式打開文件 –

+1

'header(「Content-type:text/csv」);'NOT NOT'header('Content-Type:application/csv');' –

回答

3

您已經以「只寫」模式打開文件。你沒有告訴PHP你想閱讀它。您需要以「讀寫」模式打開文件。

$f = fopen("./tokens.csv", "w+"); 

DOCS:http://www.php.net/manual/en/function.fopen.php

附:它是text/csv而不是application/csv。你也拼錯了attachment


注意:"w+"將每次覆蓋該文件。你想將文件存儲在服務器上,還是隻是一個下載腳本?如果你是存儲文件,你只是用這個下載文件時,你可以只寫直接輸出流:

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename="tokens.csv"'); 

$f = fopen("php://output", "w"); 
foreach ($tokens as $line) { 
    fputcsv($f, array("1"=>$line)); 
} 
+0

那麼,文件已填充,但它仍然是空的下載。 –

+0

附件和不附加,MIME類型也是錯誤的,因爲CSV是它:'文本/ csv' –

+0

它只是一個下載腳本。 –

1

這將工作:

$f = fopen("./tokens.csv", "w+"); 
foreach ($tokens as $line) { 
     fputcsv($f, array("1"=>$line)); 
} 

fseek($f, 0); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename="tokens.csv"'); 
fpassthru($f); 

Attachment和不attachement
正確的MIME類型CSV文件是:
header('Content-Type: text/csv');

相關問題