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

IIS 6.0 啟用 Gzip 壓縮完整配置 + PHP 代碼層 Gzip 輸出

     編輯:PHP 相關知識

IIS 6.0 服務器級 Gzip 配置 (需管理員權限)

1. 備份 Metabase.xml

copy C:\Windows\system32\inetsrv\metabase.xml D:\Backup\

2. IIS 管理器啟用 HTTP 壓縮

  • 右鍵「網站」→ 屬性 → 「服務」選項卡
  • 勾選「壓縮應用程序文件」「壓縮靜態文件」
  • 設置臨時目錄與大小限制

3. 添加 Web 服務擴展

  • 「Web 服務擴展」→ 添加新擴展
  • 名稱:HTTP Compression
  • 文件:c:\windows\system32\inetsrv\gzip.dll
  • 勾選「設置擴展狀態為允許」

4. 允許直接編輯配置庫

  • 右鍵「本地計算機」→ 屬性 → 勾選「允許直接編輯配置數據庫」

5. 編輯 metabase.xml 微調參數

搜索 IIsCompressionScheme (3 處:deflate、gzip、Parameters),修改 gzip/deflate 區塊:

  • HcDynamicCompressionLevel = 9 (0-10,9 性價比最高)
  • HcFileExtensions = htm, html, txt, js, css, xml, json (靜態文件)
  • HcScriptFileExtensions = asp, aspx, php, dll, exe (動態文件,或留空壓縮所有)
  • HcDoDynamicCompression = true (必須啟用動態壓縮)

保存後重啟 IIS:iisreset

PHP 代碼層 Gzip 輸出 (應用級,通用)

<?php
/**
 * 透明 Gzip 壓縮輸出
 * 放在所有輸出之前調用,或作為 ob_start 回調
 */
function ob_gzip($content) {
    // 條件檢查
    if (headers_sent() ||
        !extension_loaded('zlib') ||
        !strstr($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip')) {
        return $content;
    }

    // 壓縮 (級別 9,附加標記便於調試)
    $content = gzencode($content . " OK", 9);

    // 發送頭部
    header('Content-Encoding: gzip');
    header('Vary: Accept-Encoding');
    header('Content-Length: ' . strlen($content));

    return $content;
}

// 使用方式 1:手動調用 (輸出前)
echo ob_gzip($htmlContent);

// 使用方式 2:輸出緩衝回調 (自動攔截所有輸出)
ob_start('ob_gzip');
// ... 正常 echo/print ...
ob_end_flush();

驗證壓縮生效

  • 瀏覽器開發者工具 → Network → Response Headers → Content-Encoding: gzip
  • 在線工具:Gzip Test
  • 命令行:curl -H "Accept-Encoding: gzip" -I https://example.com/

現代化建議

  • IIS 6.0 已停止主流支持 (2015),建議遷移至 IIS 10 / Nginx / Apache
  • Nginx/Apache 配置 Gzip 更簡單、性能更高
  • PHP 端建議僅作兜底,優先由 Web 服務器處理靜態資源壓縮
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved