我知道我可以使用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 实现。