首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 強制瀏覽器下載 TXT 文件:header 設置 Content-Disposition 實現

     編輯:PHP 相關知識

解決瀏覽器直接預覽 TXT 的強制下載方案

現代瀏覽器默認直接顯示 .txt 文本內容,若需觸發「另存為」下載對話框,需通過 HTTP Header 指示瀏覽器作為附件處理。

核心代碼

<?php
$filename = '/path/to/' . $_GET['file'] . '.txt'; // 實際文件路徑(注意防目錄遍歷)

// 1. 聲明為強制下載類型
header('Content-Type: application/force-download');
// 或通用二進制流:header('Content-Type: application/octet-stream');

// 2. 指定下載文件名(僅文件名,不可含路徑)
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');

// 3. 輸出文件流
readfile($filename);
exit;

關鍵點解析

  1. Content-Type: application/force-download 告知瀏覽器「這不是可預覽文檔」。
  2. Content-Disposition: attachment 觸發下載行為;filename 參數決定彈出對話框顯示的默認保存名。
  3. readfile() 直接將文件流輸出到輸出緩衝區,適合大文件(不佔用 PHP 內存)。
  4. 安全提示:$_GET['file'] 嚴格過濾(如 basename()、白名單),防止 ../../etc/passwd 類路徑遍歷攻擊。

擴展:支援斷點續傳(大文件必備)

$file = fopen($filename, 'rb');
$size = filesize($filename);
header('Accept-Ranges: bytes');
header('Content-Length: ' . $size);
header('Content-Range: bytes 0-' . ($size-1) . '/' . $size);
// 處理 $_SERVER['HTTP_RANGE'] 實現部分內容輸出(206 Partial Content)...

幾行 Header 代碼,徹底解決「點擊下載卻變預覽」的用戶體驗痛點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved