當前位置: 首頁> 最新文章列表> PHP實現文件下載的三種實用方法詳解

PHP實現文件下載的三種實用方法詳解

gitbox 2025-08-04

PHP三種文件下載的實現

文件下載是Web開發中經常需要實現的功能,PHP提供了多種方式來完成這一需求。本文將介紹三種常見且實用的PHP文件下載實現方法,幫助開發者根據具體需求靈活應用。

直接輸出文件內容

最直接的文件下載方式是利用readfile()函數讀取文件並輸出。通過設置合適的HTTP響應頭,可以讓瀏覽器正確處理下載請求。

 
$filename = 'path/to/file.pdf';
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
readfile($filename);

代碼通過設置Content-Type告知瀏覽器文件類型, Content-Disposition則告訴瀏覽器以附件形式下載該文件, readfile()負責讀取文件內容並輸出。

使用file_get_contents()函數讀取文件內容

另一種方式是先用file_get_contents()函數讀取文件到內存,再輸出給客戶端。這種方法適合中小文件的下載。

 
$filename = 'path/to/file.pdf';
$filecontent = file_get_contents($filename);
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
echo $filecontent;

此方法與readfile()類似,但先將文件內容讀入變量,再通過echo輸出。

使用fread()函數分塊讀取大文件

對於大文件,推薦使用fread()函數分塊讀取文件,逐步輸出以避免一次性佔用過多內存。

 
$filename = 'path/to/largefile.zip';
$chunkSize = 1024 * 1024; // 1MB
$handle = fopen($filename, 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
while (!feof($handle)) {
    echo fread($handle, $chunkSize);
    ob_flush();
    flush();
}
fclose($handle);

代碼通過循環讀取指定大小的文件塊,調用ob_flush()flush()確保數據實時發送給客戶端,適合大文件下載時降低服務器內存壓力。

總結

本文介紹的三種PHP文件下載實現方式各有特點:直接輸出文件內容方法簡單,適合小文件; file_get_contents()適用於中等文件; fread()分塊讀取則適合大文件,能夠有效控制內存使用。根據實際項目需求選擇合適的實現方案,能提昇文件下載性能和用戶體驗。