當前位置: 首頁> 最新文章列表> 通過fpassthru 函數向瀏覽器發送壓縮文件,有哪些實用方法和注意事項?

通過fpassthru 函數向瀏覽器發送壓縮文件,有哪些實用方法和注意事項?

gitbox 2025-09-12

<?php // 文章正文開始 echo "

通過fpassthru 函數向瀏覽器發送壓縮文件,有哪些實用方法和注意事項?

"
; echo "

在PHP 開發中,經常需要將服務器上的壓縮文件(如ZIP、GZ 等)直接發送到瀏覽器,供用戶下載。 函數是一個高效的選擇,它可以從文件指針讀取文件內容,並直接輸出到瀏覽器,而無需將整個文件加載到內存中。本文將介紹一些實用方法及注意事項。

"
; echo "

一、fpassthru 的基本用法

"
; echo "

fpassthru 的基本語法如下:

"
; echo "
int fpassthru ( resource \$handle )
"
;
echo "

它會讀取\$handle指向的文件直到文件結束,並將數據直接輸出到瀏覽器,返回輸出的字節數。

"
; echo "

二、向瀏覽器發送壓縮文件的步驟

"
; echo "
    "
; echo "
  • 設置正確的HTTP 頭:確保瀏覽器知道這是一個文件下載請求。
  • "
    ; echo "
  • 打開文件:使用fopen打開需要發送的壓縮文件。
  • "
    ; echo "
  • 使用fpassthru 輸出文件內容:直接將文件內容傳輸給瀏覽器。
  • "
    ; echo "
  • 關閉文件指針:釋放資源。
  • "
    ; echo " " ; echo "

    示例代碼:

    "
    ; echo "
    \$file = &#39;example.zip&#39;;
    if (file_exists(\$file)) {
        header(&#39;Content-Description: File Transfer&#39;);
        header(&#39;Content-Type: application/zip&#39;);
        header(&#39;Content-Disposition: attachment; filename=\"&#39; . basename(\$file) . &#39;\"&#39;);
        header(&#39;Content-Transfer-Encoding: binary&#39;);
        header(&#39;Content-Length: &#39; . filesize(\$file));
    
        \$fp = fopen(\$file, &#39;rb&#39;);
        if (\$fp) {
            fpassthru(\$fp);
            fclose(\$fp);
            exit;
        }
    }
    
    "
    ;
    echo "

    三、實用方法

    "
    ; echo "
      "
    ; echo "
  • 使用readfilefpassthru避免一次性將大文件加載到內存。
  • "
    ; echo "
  • 配合ob_clean()flush()清理輸出緩衝區,保證文件正確傳輸。
  • "
    ; echo "
  • 通過Content-Length提前告知瀏覽器文件大小,提高下載體驗。
  • "
    ; echo "
  • 對大文件可分塊讀取並輸出,配合set_time_limit(0)防止超時。
  • "
    ; echo " " ; echo "

    四、注意事項

    "
    ; echo "
      "
    ; echo "
  • 確保在發送文件之前沒有任何輸出,包括空格和HTML,否則會破壞HTTP 頭。
  • "
    ; echo "
  • 正確設置MIME 類型,如ZIP 使用application/zip ,GZ 使用application/gzip
  • "
    ; echo "
  • 服務器權限需要允許PHP 讀取目標文件。
  • "
    ; echo "
  • 對大文件進行下載時,要考慮帶寬限制和超時設置。
  • "
    ; echo " " ; echo "

    五、總結

    "
    ; echo

    "使用fpassthru可以高效地將服務器上的壓縮文件發送到瀏覽器,避免內存佔用過高。在使用過程中,需要注意HTTP 頭設置、輸出緩衝區處理以及文件權限等問題。掌握這些技巧,可以讓文件下載功能更加穩定和高效。

    "
    ; // 文章正文結束 ?>