在PHP手册中,对gzdeflate的注释是:
gzcompress produces longer data because it embeds information about
the encoding onto the string. If you are compressing data that will
only ever be handled on one machine, then you don’t need to worry
about which of these functions you use. However, if you are passing
data compressed with these functions to a different machine you should
use gzcompress.
接着
running 50000 repetitions on various content, i found that gzdeflate()
and gzcompress() both performed equally fast regardless content and
compression level, but gzinflate() was always about twice as fast as
gzuncompress().
出于我的目的,我将数据存档在机器上以备将来使用.数据经常被读取,但是只能写入一次.从理论上讲,如果我在某个时候更换服务器的话,它将有一天转移到另一台机器上,但是这还需要几年的时间.
对我来说,使用gzdeflate和gzinflate而不是gzcompress和gzuncompress安全吗?
我的想法如下:gzinflate更快,这将对服务器有很大帮助,因为将有很多读取请求.如果将来无法读取文件,那么我应该能够弄清楚如何解压缩文件并重新压缩它,对吗?并不是说gzinflate有一天会神奇地失效,就像第一个评论所说的那样.即使缺少6字节的标头,我也可以肯定它可以扩展.
思考?
更新-基准
每次10,000次迭代:
gzdeflate took 19.158888816833 seconds and size 18521
gzinflate took 1.4803981781006 seconds
gzcompress took 19.376484870911 seconds and size 18527
gzuncompress took 1.6339199542999 seconds
gzencode took 20.015944004059 seconds and size 18539
gzdecodetook 1.8822891712189 seconds
解决方法:
评论是胡说八道.您可以使用gzcompress,gzdeflate或gzencode中的任何一种来生成压缩数据,该数据可以在任何地方进行可移植的解压缩.这些功能仅在放气数据周围的包装中有所不同(RFC 1951). gzcompress具有zlib包装器(RFC 1950),gzdeflate没有包装器,gzencode具有gzip包装器(RFC 1952).
我建议不要使用gzdeflate,因为没有包装器就意味着没有完整性检查. gzdeflate仅在其他包装器正在生成时才使用,例如用于zip文件,该文件也使用deflate格式.关于速度的评论几乎可以肯定是错误的.与解压缩相比,gzuncompress()的完整性检查只需很少的时间.您应该做自己的测试.
从这个例子中,我可能过于概括了,但是我想说,您应该完全忽略PHP文档中的注释.慷慨地说,他们是无知的.
顺便说一下,这些函数的命名方式令人费解.只有gzencode的名称中应带有“ gz”,因为这是实际以.gz格式处理的唯一代码. gzcompress听起来像压缩为gzip格式,但实际上压缩为zlib格式.