2013-12-09 25 views
0

我想用PHP頭創建一個.csv報告。我使用的標頭在這裏:Apache設置和PHP頭(下載CSV文件)

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=certificates.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

本來,代碼輸出一個.xls文件,但它本質上是html輸出。我沒有寫這個原始代碼,所以我只是改變了輸出和上面的第二個標題。出於某種原因,這在我的登臺服務器上工作正常,但不是生產服務器。權限是相同的,所以我想也許它與Apache設置有關。有任何想法嗎?

+3

不應該是內容類型:text/csv?你能解釋一下哪些不起作用嗎? – Lashus

+3

你能澄清一下「不起作用」的意思嗎?怎麼了? –

+0

當我嘗試在瀏覽器中打開文件時,它說它找不到。 – Sean

回答

2

這樣做的正確方法如下:

添加「將AddType」行按如下方式.htaccess文件或在適當的地方你的主服務器配置文件(我不能說正是因爲我不知道什麼發行你的Apache上運行)

AddType application/octet-stream csv 

然後使用以下PHP的片段傳送文件

header('Content-Type: application/csv'); 
header('Content-Disposition: attachment; filename=example.csv'); 
header('Pragma: no-cache'); 
readfile("name and path of CSV file you wish to send"); 

或者使用PHP來發送CSV的線,而不是使用的ReadFile從磁盤生成它。請確保你使用正確的行結束符太「\ n」在每行的結尾應該適用於Internet Explorer的目標,你可能需要做的工作「\ r \ n」

你也將要發送

header("Content-Length: xxxx"); 

上面的'xxxx'應該替換爲您的CSV內容的大小,如果您沒有提供內容長度,那麼服務器有可能不知道何時關閉連接併發出信號下載完成(實際上很少發生,但可能發生)

如果您在服務器上創建文件,獲取正確的長度非常簡單s發送前的磁盤。

header("Content-Length: " . filesize("path and file name of csv to send")); 

在這一天雖然結束,這不是一個精確的科學,而你可以做很多事情,試圖迫使瀏覽器下載文件,如果用戶配置他們的瀏覽器完全做一些事情不同的是,無論你採取什麼措施,都會發生什麼。

如果你想找MIME類型添加到您的Apache的配置,以支持這樣的場景,那麼阿帕奇「將AddType」關鍵字是你需要查找的一個:

http://httpd.apache.org/docs/2.2/mod/mod_mime.html

如果你去使用AddType,您需要確保您的Apache服務器上也安裝了「mod_mime」,通常這是默認設置之一,所以默認情況下應該在那裏。

1

好了,你沒有使用正確的Content-Type頭,應該是:

header('Content-type: text/csv');