例如: /download.php?file=results.pdf&user=...
為讓瀏覽器以正確的名稱及類型儲存下載的檔案,需要指定 HTTP Header 的 Content-Type 及 Content-Disposition 兩個參數。
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
利用 PHP 將檔案內容送給瀏覽器,最簡易的方法是利用 readfile 函式。
readfile('original.pdf');
如果是文字檔可以用 file_get_contents 函式:
echo file_get_contents('results.csv');
或是使用 File Descriptor 讀檔。
$handle = fopen("results.pdf", "rb");
echo fread($handle, filesize("results.pdf"));
fclose($handle);
「rb」這個設定是指定用「Binary Mode」讀檔,這樣對非純文字的二進位檔案才不會造成錯誤。
如果要限制下載速度,使用 while 迴圈加上 sleep。
while (!feof($handle)) {
echo fread($handle, 8192);
sleep(1);
}
若要一次將所有檔案內容直接傳回給瀏覽器,使用 fpassthru 即可:
為了避免 PHP 執行過程的錯誤訊息也被傳送到瀏覽器,造成檔案內容異常,可以加上 ob_start() .... ob_end_clean() 避免額外異常資料輸出。
可以到這裡下載PPTV哦,所有電影都是免費的: http://pptv.tw115.com
回覆刪除