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

我有大量的数据要使用两个PHP脚本来移动:一个在客户端使用命令行PHP脚本,另一个在Apache之后。 我将数据发布到服务器端,并使用php://inputstream将其保存在Web服务器端。 为了防止达到任何内存限制,每个POST请求将数据分成500kB块。 所有这一切正常。

现在,为了节省带宽并加快速度,我想在发送前压缩数据,在接收到数据时解压缩。 我发现了3对可以完成这个工作的function,但我不能决定使用哪一个:

  • gzencode / gzdecode
  • gzdeflate / gzinflate
  • gzcompress / gzuncompress

你会推荐哪一对function?为什么?

更新:我只是阅读zlib常见问题:

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

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

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

所有这三者都使用相同的algorithm。 gzencode()增加了包含原始文件名和其他环境数据的能力(当压缩一个string时,这是不用的)。 gzencode()gzcompress()都添加校验和,因此可以validation归档的完整性,这对于不可靠的传输和存储方法是有用的。 如果一切都存储在本地,并且不需要任何额外的元数据,那么gzdeflate()就足够了。 为了便于携带,我build议gzencode() (GZIP格式)可能比gzcompress() (ZLIB格式)更好地支持其他工具。

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

DEFLATE是ZLIB,GZIP等使用的压缩algorithm的名称。 从理论上讲,GZIP支持可选的压缩algorithm,但是实际上却没有。

没有“GZIPalgorithm”这样的东西。 GZIP使用DEFLATEalgorithm,并在压缩数据周围放置成帧数据。 使用GZIP,您可以添加文件的名称,文件的时间,CRC,甚至评论。 这个元数据是可选的,许多gzippers只是省略了。

ZLIB类似,除了一组不同的元数据和一个特定的2字节标题。

这些都在IETF RFC 1950,1951和1952中 。

说“gzipalgorithm压缩比DEFLATE更好”就是无稽之谈。 没有gzipalgorithm。 而在GZIP格式中使用的algorithm是DEFLATE

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