2012年9月25日

PHP筆記 - 檔案下載程式

網站提供檔案下載的功能,若是需要加上權限控管、流量限制等功能,就可以使用 PHP 程式處理。

例如: /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 即可:

fpassthru($handle);

為了避免 PHP 執行過程的錯誤訊息也被傳送到瀏覽器,造成檔案內容異常,可以加上 ob_start() .... ob_end_clean() 避免額外異常資料輸出。

1 則留言:

  1. 可以到這裡下載PPTV哦,所有電影都是免費的: http://pptv.tw115.com

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!