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

标签 php compression gzip

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

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

您会推荐哪对函数以及为什么?

更新:我刚刚阅读了 zlib 常见问题解答:

gzip 格式 (gzencode) 旨在保留有关单个文件的目录信息,例如名称和最后修改日期。另一方面,zlib 格式 (gzcompress) 是为内存和通信 channel 应用程序设计的,它具有更紧凑的标题和尾部,并且使用比 gzip 更快的完整性检查。

最佳答案

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

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

这三者都在后台使用相同的算法,因此它们的速度或效率不会有差异。 gzencode() 增加了包含原始文件名和其他环境数据的能力(当你只是压缩一个字符串时这是不使用的)。 gzencode()gzcompress() 都添加了校验和,因此可以验证存档的完整性,这对于不可靠的传输和存储方法很有用。如果所有内容都存储在本地并且您不需要任何其他元数据,那么 gzdeflate() 就足够了。对于可移植性,我推荐 gzencode()(GZIP 格式),它可能比其他工具中的 gzcompress()(ZLIB 格式)得到更好的支持。

当压缩非常短的字符串时,每种方法的开销都变得相关,因为对于非常短的输入,开销可能占输出的很大一部分。每种方法的开销,通过压缩一个空字符串来衡量,是:

  • gzencode('') = 20 字节
  • gzcompress('') = 8 字节
  • gzdeflate('') = 2 个字节

关于php - 在 PHP 中使用哪种压缩方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621976/

相关文章:

php - jquery 模式对话框不发送来自 2 个表的多个数据

c - 高效的莱斯解码实现

api - 什么是好的面向压缩的应用程序编程接口(interface) (API)?

java - 将 Zip 转换为存储压缩

java - 在 jre 中更新 gzip 库

c++ - 如何使用 Crypto++ 解析 ZIP 文件?

python - 如何使用cherrypy在 Bottle 中启用gzip压缩

php - Woocommerce 中基于自定义字段的动态价格计算

php - 如何通过 MySQL 查询使用 BirthDate 列获取年龄?

PHP MySQL 列无效