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

PHP 文件下載實作:Content-Disposition、Content-Length、basename 安全、大文件支援、瀏覽器兼容

     編輯:PHP 綜合知識

PHP 文件下載核心技術:HTTP 標頭控制下載行為、basename 保護目錄結構、readfile 發送內容、大文件分塊輸出避免記憶體溢出、Nginx X-Accel-Redirect 高性能方案、瀏覽器編碼兼容處理。

核心原理:HTTP 標頭控制

標頭作用範例
Content-TypeMIME 類型,瀏覽器據此決定處理方式application/octet-stream (強制下載)
Content-Disposition附件模式 + 檔名attachment; filename="report.pdf"
Content-Length檔案大小,支援進度條、斷點續傳1048576
Content-Transfer-Encoding傳輸編碼binary
Accept-Ranges支援範圍請求 (斷點續傳)bytes

基礎實作 (小文件)

大文件分塊輸出 (避免記憶體溢出)

Nginx X-Accel-Redirect 高性能方案 (推薦生產環境)

PHP 僅驗證權限、發送特殊標頭,Nginx 直接發送文件,釋放 PHP 進程、支援 sendfile 零拷貝、高併發優勢明顯。

Nginx 配置

location /protected/ {
    internal;                    # 僅內部重定向可訪問
    alias /var/www/files/;       # 實際文件目錄
    # 可選:限速、日誌、Token 驗證
}

PHP 代碼

無控制類型對比

文件類型瀏覽器默認行為PHP 控制下載
.rar / .zip直接下載可控制檔名、權限、統計
.avi / .mp4 / .mp3直接播放強制下載而非播放
.jpg / .png / .pdf瀏覽器預覽強制下載

安全檢查清單

  • 路徑穿透防護:basename() + 白名單目錄驗證
  • 權限驗證:登入檢查、所有權確認、下載次數限制
  • 中文檔名編碼:RFC 5987 filename*=utf-8''... + IE 兼容
  • 大文件支援:分塊輸出 / X-Accel-Redirect / X-Sendfile (Apache)
  • 斷點續傳:支援 Range 請求頭 (需額外邏輯或 Nginx 原生)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved