当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在PHP中使用哪种压缩方法?》经验,为你挑选了3个好方法。

我使用两个PHP脚本移动大量数据:一个在客户端使用命令行PHP脚本,另一个在Apache后面.我将数据发布到服务器端并使用php://输入流将其保存在Web服务器端.为防止达到任何内存限制,每个POST请求的数据将分为500kB块.这一切都很好.

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

gzencode/gzdecode

gzdeflate/gzinflate

gzcompress/gzuncompress

你会推荐哪一对功能?为什么?

更新:我刚读过zlib FAQ:

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



1> thomasrutter..:

所有这些都可以使用.三者之间存在细微差别:

gzencode()使用GZIP文件格式,与gzip命令行工具相同.此文件格式包含一个包含可选元数据的标头,DEFLATE压缩数据和包含CRC32校验和和长度检查的页脚.

gzcompress()使用ZLIB格式.它有一个较短的标题,仅用于标识压缩格式,DEFLATE压缩数据和包含ADLER32校验和的页脚.

gzdeflate()自己使用原始DEFLATE算法,这是其他两种格式的基础.

这三个人都使用相同的算法. gzencode()添加了包含原始文件名和其他环境数据的功能(仅在压缩字符串时不使用). gzencode()并且gzcompress()都添加了校验和,因此可以验证存档的完整性,这对于不可靠的传输和存储方法非常有用.如果所有内容都存储在本地,并且您不需要任何其他元数据,那么gzdeflate()就足够了.为了便携性,我建议gzencode()(GZIP格式)可能比gzcompress()(ZLIB格式)更好地支持其他工具.

当压缩非常短的串时,每种方法的开销变得相关,因为对于非常短的输入,开销可以包括输出的重要部分.通过压缩空字符串来衡量每种方法的开销是:

gzencode('') = 20个字节

gzcompress('') = 8个字节

gzdeflate('') = 2个字节


差不多正确.我调查了一下,似乎gzencode不是任何标题数据 - 它只是有不同的标题数据.
@Milan我想你的意思是"gzcompress不是没有任何标题数据 - 它只有不同的标题数据".

2> Cheeso..:

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

DEFLATE是ZLIB,GZIP和其他人使用的压缩算法的名称.理论上,GZIP支持替代压缩算法,但在实践中,没有.

没有"GZIP算法"这样的东西.GZIP使用DEFLATE算法,并在压缩数据周围放置成帧数据.使用GZIP,您可以添加文件名,文件时间,CRC,甚至评论等内容.但是,这个元数据是可选的,许多gzippers只是省略了它.

ZLIB类似,除了具有不同的,更有限的元数据集和特定的2字节头.

这是所有的IETF RFC 1950年,1951年和1952年.

要说"gzip算法压缩比DEFLATE更好"只是无稽之谈.没有gzip算法.GZIP格式中使用的算法是DEFLATE.



3> Jan Jungnick..:

所有方法基本相同,它们之间的差异主要在标题中.我个人使用gzencode,这将产生的输出等于对gzip实用程序的命令行调用.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有