2010-10-08 280 views
0

這是我正在使用的代碼。建議我已經添加了內容類型和處置的標題。無法下載文件 - PHP

<?php 
header('Content-Disposition: attachment'); 
header('Content-Type: application/octet-stream'); 

$con = mysql_connect("localhost","root","admin"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("acl_cake", $con); 

$result = mysql_query("select * from attachments"); 

while($row = mysql_fetch_array($result)) 
{ 
echo '<a href="'.$row[2].'" target="_blank">Download</a>--'.$row[3].'<br>'; 
} 

mysql_close($con); 
?> 

此前除了頭,我會在網頁上提供的幾個環節。無論何時我點擊其中一個,都會打開一個新頁面,並且該文件中的內容會顯示在新頁面中。

現在,在添加標題後,每當我加載頁面時,都會彈出一個窗口,要求我下載表單而不是文件。

如果我有content-disposition:attachment; filename='file.txt',那麼在頁面加載時會彈出一個下載文件「file.txt」的鏈接,並且沒有任何鏈接顯示在網頁上。

我不知道我是否犯了一些錯誤。

我不確定我是否在標題中犯了錯誤。

+0

這是爲什麼被這麼多投票呢? – 2010-10-08 14:29:58

+1

可能因爲解釋不清楚。我猜。 – 2010-10-08 14:32:56

+0

他使用'spits'而不是'display':o – bangbambang 2010-10-08 14:37:35

回答

3

您需要發送的內容部署標頭強制下載

header("Content-Disposition: attachment; filename=\"my.file\""); 

還設置了內容下明確鍵入:

header('Content-Type: application/octet-stream'); 
+0

沒有冒犯,但是當你可以使用單引號時,轉義雙引號有什麼意義? – fabrik 2010-10-08 14:29:00

+0

嗯,我剛剛從谷歌搜索中複製了這段代碼,因爲我記不起來了,所以沒有真正的意思:) – 2010-10-08 14:30:48

+0

標題應該放在文件的開頭是不是?我將如何獲得文件名呢?它是可選的還是必需的? – macha 2010-10-08 14:33:07

0

如果我明白你的意思,你不會給你的用戶一個下載文本文件的鏈接。如果是這樣,您可以通過爲此文件設置一個application/octet-stream -header(例如使用php)來完成此操作。

說明:在大多數情況下,我認爲你不應該這樣做。用戶不知道如何處理可以通過瀏覽器打開的文件,並且如果用戶不想下載這些文件,hea可以輕鬆地將瀏覽器配置爲這個或那個。

+0

!我添加了這個頭「header('Content-Type:application/octet-stream');」在頂部。但是無論何時加載頁面,我都會彈出一個讓我下載頁面的彈出窗口。我不確定我犯了什麼錯誤。 – macha 2010-10-08 14:43:04