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

此函数返回输入 data 的压缩版本,与 gzip 程序的输出兼容。

有关 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 条注释

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 字节)
----------------------------------------------
jp dot amarok at email dot cz
一个月前
可能难以理解“gzcompress”、“gzdeflate”和“gzencode”之间的区别。以下是我的注释

gzcompress()
------------
使用 ZLIB_ENCODING_DEFLATE (https://php.net/manual/en/zlib.constants.php#constant.zlib-encoding-deflate)
根据 RFC 1950 的 ZLIB 压缩算法。

与 pigz 兼容。(与 gzip 不兼容。)
具有标头(压缩详细信息,以 0x78 开头)和页脚(未压缩数据的 Adler32 校验和,以大端序表示)。

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

没有标头和页脚。纯 DEFLATE。

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

与 gzip 兼容。
标头以魔数 0x1f8b 开头,然后是压缩方法 8 (DEFLATE),无文件标志,无时间戳,带有操作系统 ID。
页脚包含未压缩数据的 CRC32 校验和,然后是未压缩数据的大小,两者都以小端序表示。
To Top