PHP Conference Japan 2024

gzencode

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gzencode建立 gzip 壓縮字串

說明

gzencode(字串 $data, 整數 $level = -1, 整數 $encoding = ZLIB_ENCODING_GZIP): 字串|false

這個函式會傳回與 gzip 程式輸出相容的輸入 data 壓縮版本。

關於 GZIP 檔案格式的更多資訊,請參閱文件:» GZIP 檔案格式規格版本 4.3 (RFC 1952)。

參數

data

要編碼的資料。

level

壓縮級別。可以指定為 0 表示不壓縮,最大到 9 表示最大壓縮。如果未指定,則預設壓縮級別將是 zlib 函式庫的預設壓縮級別。

encoding

編碼模式。可以是 FORCE_GZIP(預設值)或 FORCE_DEFLATE

FORCE_DEFLATE 會產生符合 RFC 1950 的輸出,包含 zlib 標頭、壓縮資料和 Adler 校驗和。

傳回值

已編碼的字串,如果發生錯誤則傳回 false

範例

產生的資料包含適當的標頭和資料結構,以建立標準的 .gz 檔案,例如:

範例 #1 建立 gzip 檔案

<?php
$data
= file_get_contents("bigfile.txt");
$gzdata = gzencode($data, 9);
file_put_contents("bigfile.txt.gz", $gzdata);
?>

另請參閱

新增註解

使用者貢獻的註解 2 則註解

12
Sam Dowling
13 年前
這是 gzencode 的基準測試 (.txt 檔案)
----------------------------------------------
原始檔案大小 = 3.29 MB (3,459,978 位元組)
壓縮等級 1 = 1.09 MB (1,144,006 位元組)
壓縮等級 2 = 1.06 MB (1,119,518 位元組)
壓縮等級 3 = 1.03 MB (1,085,567 位元組)
壓縮等級 4 = 953 KB (976,538 位元組)
壓縮等級 5 = 909 KB (931,486 位元組)
壓縮等級 6 = 910 KB (932,516 位元組)
壓縮等級 7 = 910 KB (932,608 位元組)
壓縮等級 8 = 910 KB (932,646 位元組)
壓縮等級 9 = 910 KB (932,652 位元組)
----------------------------------------------
1
jp dot amarok at email dot cz
1 個月前
理解 "gzcompress"、"gzdeflate" 和 "gzencode" 之間的差異可能很困難。以下是我的筆記

gzcompress()
------------
使用 ZLIB_ENCODING_DEFLATE (https://php.dev.org.tw/manual/en/zlib.constants.php#constant.zlib-encoding-deflate)
根據 RFC 1950 的 ZLIB 壓縮演算法。

與 pigz 相容。(與 gzip 不相容。)
具有標頭(壓縮詳細資訊,以 0x78 開頭)和頁尾(未壓縮數據的 Adler32 校驗和,採用大端序)。

gzdeflate()
------------
使用 ZLIB_ENCODING_RAW (https://php.dev.org.tw/manual/en/zlib.constants.php#constant.zlib-encoding-raw)
根據 RFC 1951 的 DEFLATE 演算法。

沒有標頭和頁尾。純粹的 DEFLATE。

gzencode()
------------
使用 ZLIB_ENCODING_GZIP (https://php.dev.org.tw/manual/en/zlib.constants.php#constant.zlib-encoding-gzip)
根據 RFC 1952 的 GZIP 演算法。

與 gzip 相容。
標頭以魔術數字 0x1f8b 開頭,然後是壓縮方法 8(DEFLATE),沒有檔案旗標,沒有時間戳記,具有作業系統 ID。
頁尾包含未壓縮數據的 CRC32 校驗和,然後是未壓縮數據的大小,兩者皆採用小端序。
To Top