首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中使用哪种压缩方法?

在PHP中使用哪种压缩方法?
EN

Stack Overflow用户
提问于 2009-03-07 15:17:22
回答 3查看 30.8K关注 0票数 76

我要使用两个PHP脚本移动大量数据:一个在客户端使用命令行PHP脚本,另一个在Apache后面。我将数据发布到服务器端,并使用php://input stream将其保存在web服务器端。为了防止达到任何内存限制,对于每个POST请求,数据被分成500kB的块。所有这些都运行得很好。

现在,为了节省带宽并加快速度,我希望在发送数据之前压缩数据,并在另一端接收数据时进行解压缩。我找到了3对可以完成这项工作的函数,但我无法决定使用哪一个:

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

更新:我刚刚读了zlib常见问题解答:

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-07 15:24:43

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

gzip命令行工具相同,

  • 使用GZIP文件格式。此文件格式具有包含可选元数据的标题、压缩数据,以及包含ZLIB校验和和check.
  • 使用CRC32格式的长度的页脚。它的页眉较短,仅用于标识压缩格式和压缩数据,包含checksum.
  • 的页脚单独使用原始DEFLATE算法,这是其他两种格式的基础。

这三种算法在幕后都使用相同的算法,因此它们在速度或效率上不会有区别。gzencode()增加了包含原始文件名和其他环境数据的功能(当您只是压缩字符串时,不会使用此功能)。gzencode()gzcompress()都添加了校验和,因此可以验证归档的完整性,这对于不可靠的传输和存储方法很有用。如果所有内容都存储在本地,并且不需要任何额外的元数据,那么gzdeflate()就足够了。对于可移植性,我推荐使用gzencode() (GZIP格式),在其他工具中,它可能比gzcompress() (ZLIB格式)支持得更好。

当压缩非常短的字符串时,每个方法的开销变得相关,因为对于非常短的输入,开销可能包括输出的很大一部分。每种方法的开销(通过压缩空字符串来测量)为:

  • gzencode('') = 20 bytes
  • gzcompress('') =8 bytes
  • gzdeflate('') =2字节
票数 104
EN

Stack Overflow用户

发布于 2009-03-07 16:13:42

我不是PHP专家,无法回答提出的问题,但似乎这里有很多猜测,并提供了模糊的信息。

DEFLATE是ZLIB、GZIP等使用的压缩算法的名称。理论上,GZIP支持可选的压缩算法,但在实践中,根本没有。

没有“GZIP算法”这回事。GZIP使用DEFLATE算法,并在压缩数据周围放置成帧数据。使用GZIP,您可以添加诸如文件名、文件时间、CRC,甚至注释之类的内容。不过,这个元数据是可选的,许多gzippers都忽略了它。

ZLIB是相似的,除了具有不同的、更有限的元数据集和特定的2字节头。

这都是在IETF RFC 195019511952中实现的。

说“gzip算法压缩得比DEFLATE好”完全是无稽之谈。没有gzip算法。GZIP格式的中使用的算法是DEFLATE

票数 49
EN

Stack Overflow用户

发布于 2009-03-07 15:27:19

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/621976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档