2013-02-22 25 views
7

在PHP手册上有gzdeflate说评论:PHP:gzdeflate在多台机器上安全吗?

gzcompress产生更长的数据,因为它嵌入关于 信息编码到字符串。如果您要压缩的数据只能在一台机器上处理,那么您无需担心 您使用的是哪些功能。但是,如果您将 与这些函数压缩的数据传递到另一台机器,则应该使用gzcompress 。

然后

上运行的各种内容50000次重复,我发现gzdeflate() 和gzcompress()都执行一样快,无论内容和 压缩级别,但gzinflate()总是约两倍于 gzuncompress()。

为了我的目的,我将数据存档在机器上供将来使用。数据经常被读取,但只写入一次。从理论上讲,如果我在某个时候更换服务器,将来有一天会转移到另一台机器上,但那是几年之后的事情。

与gzcompress和gzuncompress相比,使用gzdeflate和gzinflate安全吗?

我的想法如下: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 

回答

9

的评论是无稽之谈。您可以使用gzcompressgzdeflategzencode中的任意一种来生成压缩数据,这些数据可以在任何地方进行可移植的解压缩。这些函数仅在deflate数据的封装(RFC 1951)中有所不同。 gzcompress有一个zlib包装器(RFC 1950),gzdeflate没有包装器,而gzencode有一个gzip包装器(RFC 1952)。

我会推荐不是使用gzdeflate,因为没有包装意味着没有完整性检查。 gzdeflate只能在其他包装外部生成时使用,例如为zip文件,也使用deflate格式。关于速度的评论几乎肯定是错误的。与解压缩相比,gzuncompress()的完整性检查花费的时间非常少。你应该做你自己的测试。

从这个例子中我可能会过度概括,但我会说你应该完全忽略PHP文档中的注释。他们是慷慨的,不知情的。

顺便说一句,这些功能是以一种非常混乱的方式命名的。只有gzencode的名称中应该包含“gz”,因为这是.gz格式中实际处理的唯一一个。听起来它像压缩到gzip格式,但实际上它压缩到zlib格式。

+0

谢谢你的回答。这对我有很大的帮助。请考虑在php.net文档中发布您的答案。 – Alasdair 2013-02-23 05:48:35

相关问题