我有大量的数据要使用两个PHP脚本移动:一个在客户端使用命令行PHP脚本,另一个在Apache后面。我将数据POST到服务器端,并使用php://input stream将其保存在Web服务器端。为了防止达到任何内存限制,每个POST请求的数据被分成500 kB块。所有这些都很好。
现在,为了保存带宽并加快速度,我想在发送之前压缩数据,并在另一端接收时解压缩。我发现3对函数可以完成这项工作,但我无法决定使用哪一个:
你会推荐哪一对函数,为什么?
**更新:**我刚刚阅读了zlib FAQ:
- gzip格式(
gzencode
)旨在保留单个文件的目录信息,例如名称和最后修改日期。另一方面,zlib格式(gzcompress
)是为内存和通信通道应用程序设计的,并且具有更紧凑的头部和尾部,并且使用比gzip更快的完整性检查。*
3条答案
按热度按时间mrwjdhj31#
这些都可以使用。三者之间有细微的区别:
gzip
命令行工具相同。此文件格式具有包含可选元数据、DEFLATE压缩数据的头部和包含CRC 32校验和和长度检查的页脚。这三个文件都使用相同的算法,因此它们在速度或效率上没有区别。
gzencode()
和gzcompress()
都添加了校验和,因此可以验证归档文件的完整性。这对于不可靠的传输和存储方法非常有用。如果所有内容都存储在本地,并且您不需要任何额外的元数据,那么gzdeflate()
就足够了。我推荐gzencode()
(GZIP格式),在其他工具中,它可能比gzcompress()
(ZLIB格式)更受支持。当压缩非常短的字符串时,每种方法的开销都是相关的,因为对于非常短的输入,开销可以包括输出的很大一部分。通过压缩空字符串来测量,每种方法的开销为:
gzencode('')
- 20字节gzcompress('')
- 8字节gzdeflate('')
- 2字节s8vozzvw2#
我不是PHPMaven,不能回答提出的问题,但似乎有很多猜测在这里进行,和模糊的信息正在提供。
DEFLATE是ZLIB、GZIP和其他压缩算法的名称。理论上,GZIP支持其他压缩算法,但实际上没有。
没有所谓的“GZIP算法”。GZIP使用DEFLATE算法,并将帧数据放在压缩数据周围。使用GZIP,您可以添加文件名,文件时间,CRC甚至注解等内容。尽管此元数据是可选的,但许多gzip只是省略了它。
ZLIB与之类似,除了具有不同的、更有限的元数据集和特定的2字节报头。
这都在IETF RFC 1950、1951和1952中。
说“gzip算法比DEFLATE压缩得更好”是无稽之谈。没有gzip算法。GZIP格式使用的算法是DEFLATE。
czq61nw13#
所有的方法本质上都是一样的,它们之间的区别主要是在头文件中。我个人会使用gzencode,这将产生输出,相当于对gzip实用程序的命令行调用。