将已压缩文件的 gzip 标头替换为 zlib 标头


Replace gzip headers of a compresed file with zlib headers

我知道我可以使用PHP压缩

gzcompress($contents, 9);

但我不喜欢结果。即使使用最新版本的 zlib,我也得到了更大的文件,即 7zip 的输出(当然是 deflate)。

那么如何用 zlib 头替换 gzip 头(用ADLER32校验和)

你的问题不清楚,但我想你在问如何获取 7zip 的 gzip 输出并将其转换为 zlib。

您需要解码 gzip 标头并将其剥离。 (它可能是 10 个字节,但如果它包含文件名,则可能会更长。RFC 1952 描述了标头格式。然后你会在前面加上一个双字节的 zlib 标头,例如 0x78 0xda。

然后从末尾剥离最后八个字节,并按大端顺序附加未压缩数据的四字节 Adler-32 总和。您需要自己计算,RFC 1950 中对此进行了描述,或者您可以调整 zlib 实现。