【问题标题】:equivalent to php gzinflate() in linux相当于linux中的php gzinflate()
【发布时间】:2013-11-26 06:34:00
【问题描述】:

我的服务器响应 Content-type:application/binary,我可以通过从数据中删除前 10 个字符和后 8 个字符并将该数据传递给 php 的 gzinflate() 命令来解码该数据。

但是我想用 Linux shell 脚本做同样的事情,但我不知道怎么做,有谁知道在 linux 中是否有与 gzinflate 类似的功能,或者有没有其他方法可以解决这个问题。

【问题讨论】:

  • 您将问题标记为“gzip”——您是否尝试过在下载的文件上使用gunzip 程序?
  • 顺便说一句,application/binary 并不意味着 gzip 压缩,通用二进制文件的“正确”内容类型是 application/octet-stream
  • 是的,我已经用 gunzip 试过了,但它给出的错误是:gzip: data.gz: not in gzip format
  • 我不知道服务器端的实现,但它用 gzinflate 给了我正确的输出(解压缩压缩数据),所以我假设它是压缩格式,它的标题显示它是应用程序/二进制
  • 如果你在整个事情上使用 gzdecode() 而不删除任何字节会发生什么?

标签: php linux gzip


【解决方案1】:

在 Linux shell 中使用 gzip、gunzip 或 zcat 时,您总是在处理以 10 字节标头开头的数据。该标头包括(除其他外)2字节签名(也称为“魔术”)、时间戳和压缩方法。在前 10 个字节之后还有一些标志通知可选的辅助标头。

PHP 函数 gzinflate() 和 gzdeflate() 不适用于这些标头字节。这就是您必须从服务器响应中删除前 10 个字节的原因。

因此,为了在 Linux shell 中扩充您从服务器接收到的数据,只需将其全部传递给 gunzip 或 zcat,而不需要删除任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多