2009-10-28 87 views
1

我給用戶一個鏈接,下載一個CSV文件...只是使用PHP的 - 文件下載對話框

Click <a href="report.csv">here</a> to download your file. 

該文本和鏈接被顯示在一個小的彈出窗口 - 高度100寬度400 。

如果用戶點擊「保存」 - 那麼沒有問題,然後將文件保存到,無論他們選擇

如果雖然他們選擇「打開」的CSV文件,然後顯示在小的彈出窗口。這不是我想要的 - 我更喜歡excel打開並在Excel中顯示文件,甚至禁用「打開」按鈕可能是一個可能的選擇。

任何想法我可以實現嗎?

謝謝,

回答

4

我假設你打開使用一些JavaScript的彈出框..所以我建議不要顯示/打開你的小「下載」彈出框,而是在網頁上顯示此鏈接。所以,當有人點擊鏈接時,強制瀏覽器下載文件,如果他們想打開它,他們可以並且可能獲得與browswer的窗口大小一樣寬的視圖。

//只是舉例,強制zip文件的下載,發送標題爲

// Set headers 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/zip"); 
header("Content-Transfer-Encoding: binary"); 
+0

其實...這是非常接近。我剛剛添加.. $ strData是我的字符串 函數csv_export($ strData) { $ myFile =「report.csv」; header(「Cache-Control:public」); header(「Content-Description:File Transfer」); header(「Content-Disposition:attachment; filename =」。$ myFile); header(「Content-Type:application/octet-stream'」); $ fh = fopen($ myFile,'w')或死(「無法打開文件」); fwrite($ fh,$ strData); fclose($ fh); readfile($ myFile); } ?> – thegunner

0

我相信這是OS級別,無法更改。

1

您對用戶的設置沒有影響力,例如哪個文件類型是由哪個應用程序打開的。他們必須轉到他們的設置並更改文件關聯。但是,請記住,並非每個人都安裝了Excel,因此強制用戶在此特定應用程序中打開csv文件並不是一個好主意。

我也不認爲你可以禁用打開選項,這也是由網絡瀏覽器的配置決定,無論它將會或不會顯示窗口,或者它會直接啓動相關應用程序等等......看起來你在你的特殊情況下運氣不好。

-1
  • 確保你沒有這個點之前做任何其他的輸出
  • 構建您的CSV字符串,並將其存儲在$ csvString
  • 給它在$ csv_filename相應的文件名
  • 的標題應該告訴瀏覽器加載它在Excel

    header("Cache-Control: maxage=1");

    header("Pragma: public");

    header("Content-Type: application/vnd.ms-excel");

    header("Expires: 0");

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    header("content-disposition: attachment;filename=$csv_filename");

    echo $csvString;

+0

CSV文件的MIME類型是text/css,而不是application/vnc.ms-excel:http://www.rfc-editor.org/rfc/rfc4180.txt – Quentin

+0

感謝您的工作.. ..足夠適合我! – thegunner

+0

這是,但他表示,他希望它在Excel中打開。 text/csv也會起作用。 –

0

一個半解決方案是將target="_blank"添加到標籤。這樣,當用戶選擇「打開」選項時,至少該文件將以新的(全屏或至少可調整大小)窗口打開。正如ceejayoz所述,你不能改變窗口的行爲。