PHP利用header()下載檔案,來隱藏路徑並解決檔案超過 memory_limit 限制
檔案下載可直接使用 <a href="[filepath]">檔案下載</a>來直接下載檔案,但路徑卻會輕易被得知,之後只要有心人複製 [filepath]貼到瀏覽器,就可以直接下載,而無需透過網頁點選。 此時可利用header來隱藏檔案連結路徑。 1. 先用 SQL資料表,存取檔案路徑與產生該路徑之唯一鍵,如以下 $filekey = md5( [filepath] ); 製作PHP來製作 $filekey 與 $filepath 之對應。 利用 POST 或 GET 來傳遞 filekey ,傳遞前使用 urlencode()來編碼,再利用 urldecode() 來解出 $filekey 並搜尋出相對應的 $filepath。 2. 接著利用 header() 來下載 filepath,利用 finfo 類別來偵測檔案類型: <?php $finfo = finfo_open(FILEINFO_MIME); header('Content-Type: '.finfo_file($finfo, $filepath)); header('Content-Description: File Transfer'); header('Content-Transfer-Encoding: binary'); header('Cache-control: private'); header("Content-Length: ". (string)filesize($filepath)); header("Content-Disposition: attachment; filename=".basename($filepath)); ob_clean(); ob_flush(); readfile($filepath); /* 以下修正檔案超過 memory_limit 大小造成之錯誤 */ while (!feof($fp)) { ...