PHP 內建 gzcompress() 與 gzuncompress() 基於 zlib 演算法,可快速壓縮/解壓字串,適用於快取儲存、網路傳輸減少頻寬、資料庫欄位壓縮等場景。本文示範基本用法與壓縮等級設定。
<?php
$str = 'Hello I am a very very very very long string';
// 壓縮等級 0-9(9 最高壓縮比,最耗 CPU)
$compressed = gzcompress($str, 9);
$uncompressed = gzuncompress($compressed);
echo "原始長度: " . strlen($str) . " 位元組\n";
echo "壓縮長度: " . strlen($compressed) . " 位元組\n";
echo "解壓結果: $uncompressed\n";
echo "是否相同: " . ($str === $uncompressed ? '是' : '否') . "\n";
?>
<?php
// 二進位壓縮資料常需編碼為可列印字串
echo "Base64: " . base64_encode($compressed) . "\n";
echo "Hex: " . bin2hex($compressed) . "\n";
echo "URL Enc:" . urlencode($compressed) . "\n";
?>
| 等級 | 壓縮比 | CPU 耗用 | 適用場景 |
|---|---|---|---|
| 0 | 無壓縮 | 最低 | 測試/偵錯 |
| 1 | 最快 | 低 | 即時壓縮、高頻寫入 |
| 6 (預設) | 平衡 | 中 | 通用場景 |
| 9 | 最高 | 高 | 靜態資源、一次寫入多次讀取 |
<?php
// gzencode 產生符合 RFC 1952 的 gzip 格式(含標頭、CRC32)
$gzipped = gzencode($str, 9);
// 可直接輸出給瀏覽器(需送出 Content-Encoding: gzip 標頭)
// header('Content-Encoding: gzip');
// echo $gzipped;
$original = gzdecode($gzipped);
?>
gzcompress 產生 ZLIB 格式(RFC 1950),gzencode 產生 GZIP 格式(RFC 1952),兩者不相容,請根據用途選擇。
gzcompress()/gzuncompress() 提供簡單高效的字串壓縮方案,適當選擇壓縮等級可在體積與效能間取得平衡。希望本文對您的 PHP 程式設計有所幫助。