PHP中使用哪种压缩方法?

xyhw6mcr  于 2023-04-04  发布在  PHP
关注(0)|答案(3)|浏览(76)

我有大量的数据要使用两个PHP脚本移动:一个在客户端使用命令行PHP脚本,另一个在Apache后面。我将数据POST到服务器端,并使用php://input stream将其保存在Web服务器端。为了防止达到任何内存限制,每个POST请求的数据被分成500 kB块。所有这些都很好。
现在,为了保存带宽并加快速度,我想在发送之前压缩数据,并在另一端接收时解压缩。我发现3对函数可以完成这项工作,但我无法决定使用哪一个:

你会推荐哪一对函数,为什么?

**更新:**我刚刚阅读了zlib FAQ:

  • gzip格式(gzencode)旨在保留单个文件的目录信息,例如名称和最后修改日期。另一方面,zlib格式(gzcompress)是为内存和通信通道应用程序设计的,并且具有更紧凑的头部和尾部,并且使用比gzip更快的完整性检查。*
mrwjdhj3

mrwjdhj31#

这些都可以使用。三者之间有细微的区别:

  • gzencode()使用GZIP文件格式,与gzip命令行工具相同。此文件格式具有包含可选元数据、DEFLATE压缩数据的头部和包含CRC 32校验和和长度检查的页脚。
  • gzcompress()使用ZLIB格式。它有一个较短的头部,仅用于标识压缩格式、DEFLATE压缩数据和一个包含ADLER 32校验和的页脚。
  • gzdeflate()本身使用原始DEFLATE算法,这是其他两种格式的基础。

这三个文件都使用相同的算法,因此它们在速度或效率上没有区别。gzencode()gzcompress()都添加了校验和,因此可以验证归档文件的完整性。这对于不可靠的传输和存储方法非常有用。如果所有内容都存储在本地,并且您不需要任何额外的元数据,那么gzdeflate()就足够了。我推荐gzencode()(GZIP格式),在其他工具中,它可能比gzcompress()(ZLIB格式)更受支持。
当压缩非常短的字符串时,每种方法的开销都是相关的,因为对于非常短的输入,开销可以包括输出的很大一部分。通过压缩空字符串来测量,每种方法的开销为:

  • gzencode('')- 20字节
  • gzcompress('')- 8字节
  • gzdeflate('')- 2字节
s8vozzvw

s8vozzvw2#

我不是PHPMaven,不能回答提出的问题,但似乎有很多猜测在这里进行,和模糊的信息正在提供。
DEFLATE是ZLIB、GZIP和其他压缩算法的名称。理论上,GZIP支持其他压缩算法,但实际上没有。
没有所谓的“GZIP算法”。GZIP使用DEFLATE算法,并将帧数据放在压缩数据周围。使用GZIP,您可以添加文件名,文件时间,CRC甚至注解等内容。尽管此元数据是可选的,但许多gzip只是省略了它。
ZLIB与之类似,除了具有不同的、更有限的元数据集和特定的2字节报头。
这都在IETF RFC 195019511952中。
说“gzip算法比DEFLATE压缩得更好”是无稽之谈。没有gzip算法。GZIP格式使用的算法是DEFLATE

czq61nw1

czq61nw13#

所有的方法本质上都是一样的,它们之间的区别主要是在头文件中。我个人会使用gzencode,这将产生输出,相当于对gzip实用程序的命令行调用。

相关问题