【PHP】下載檔案但不直接開啟

多數人在下載檔案的頁面直接連結該檔案, 如下寫法 ----

a href="檔名.副檔名"

這在 windows 系統會有一個可能的狀況,當此類型檔案與 windows 預設開啟功能產生關聯時(通常是以副檔名為判斷依據),一點擊這個下載連結時,windows 就會自動啟動此類型檔案的程式並開啟此檔案,例如:

下載的檔案為 demo.txt,而 .txt 檔在 windows 預設的開啟程式為記事本,所以一點擊此連結,windows 便會啟動記事本並開啟 demo.txt,但實際上我們所希望的是真正的下載 demo.txt 並儲存在硬碟內。

要達到此目的, 我們需要另一個專門下載檔案的 PHP 小程式, 假設我們將這個小程式命名為 downloadfile.php, 其程式內容如下 ----

if(isset($_GET['file']))
{
    // $_GET['file'] 即為傳入要下載檔名的引數
    header("Content-type:application");
    header("Content-Length: " .(string)(filesize($_GET['file'])));
    header("Content-Disposition: attachment; filename=".$_GET['file']);
    readfile($_GET['file']);
}


另外, 改寫原下載頁面的 html 語法 ----

a href="downloadfile.php?file=檔名.副檔名"