文件下載是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()函數讀取文件到內存,再輸出給客戶端。這種方法適合中小文件的下載。
$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()函數分塊讀取文件,逐步輸出以避免一次性佔用過多內存。
$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()分塊讀取則適合大文件,能夠有效控制內存使用。根據實際項目需求選擇合適的實現方案,能提昇文件下載性能和用戶體驗。