【问题标题】:PHP which compression function has equal output like mod_deflate?PHP 哪个压缩函数具有与 mod_deflate 相同的输出?
【发布时间】:2023-07-25 22:09:01
【问题描述】:

我试过了:

gzencode($contents, 9, FORCE_DEFLATE)
gzdeflate...
zlib_encode($contents, -15);// RFC 1951 - raw deflate
zlib_encode($contents, 15);// RFC 1950 - zlib

但是没有一个是合适的,因为输出不同。

我说的是输出,而不是标题!

我需要放气,而不是 gzip。

【问题讨论】:

  • gzencode 应该可以完成这项工作。有什么问题?
  • 你能详细说明你想在这里做什么
  • 好的,mod_deflate 和 mod_gzip 在我的主机上不起作用,因为提供商。不,我不能改变主机。我正在尝试为图像、css、脚本实现放气……所以,所有标题都可以。当我使用 gzencode($contents, 9, FORCE_GZIP) 时,一切正常。但是当我使用 gzencode($contents, 9, FORCE_DEFLATE) 我得到 ERR_CONTENT_DECODING_FAILED。那么,deflate 和 gzip 有什么区别呢?我认为只是标题和校验和的区别。
  • 这是不同类型的问题,不是吗?你应该用你的真实问题编辑帖子
  • 听着,我今天创建了 3 个问题,因为“这是其他类型的问题”,但我仍然没有答案。我只需要看到它工作。我不想成为垃圾邮件发送者

标签: php deflate


【解决方案1】:

PHP 的gzcompress()。在 HTTP 规范和内容编码中使用“deflate”这个词是用词不当。它真正的意思是 zlib,它是一个围绕原始 deflate 数据的 zlib 包装器。 gzcompress() 生成 zlib 包装的 deflate 数据。

来自 HTTP 1.1 规范:

deflate:RFC 1950 [31] 中定义的“zlib”格式与 RFC 1951 [29] 中描述的“deflate”压缩机制。

所以 HTTP "deflate" == zlib. HTTP“放气”!=放气。

作为参考,gzencode() 生成 gzip 包装的 deflate 数据,gzdeflate() 生成原始的、未包装的 deflate 数据。

【讨论】:

  • 那么你做错了什么。 gzcompress() 实际上会生成 HTTP 为“deflate”指定的格式。
  • 那么为什么它与 gzip 一起工作呢?我只改变了一行。使用 gzip 的响应标头为:HTTP/1.1 200 OK 日期:2016 年 1 月 26 日星期二 22:22:44 GMT 服务器:Apache X-Powered-By:PHP/7.0.2 内容编码:gzip 变化:接受编码内容-长度:1983 内容类型:text/html;charset=UTF-8 且必须与zlib相等
  • 您是否更改了请求的内容编码?你有没有看客户说它会接受什么? HTTP 内容编码是服务器和客户端之间的协商。
  • 更改请求内容编码?你是什​​么意思?客户端请求标头是相同的。当我尝试使用 zlib 时,客户端(浏览器)只显示错误 ERR_CONTENT_DECODING_FAILED,在开发工具的“网络”选项卡上没有关于该页面的信息。
  • 也许您需要阅读更多有关 HTTP 工作原理的信息。客户端使用例如Accept-Encoding: deflate, gzip(也允许identity)说明它接受的编码,并且服务器使用它使用的编码进行响应,例如Content-Encoding: deflate,这应该是客户端的编码之一表示会接受。当然,它必须与您实际使用的编码相匹配。