0

我有这个功能用于解码 gzipped 文件,

// GZIP DECODE
function gzipDecode($d) {
    $f = ord(substr($d, 3, 1));
    $h = 10;
    $e = 0;
    if($f&4) {
        $e = unpack('v', substr($d, 10, 2));
        $e = $e[1];
        $h += 2 + $e;
    }
    if($f&8) {
        $h = @strpos($d, chr(0), $h) + 1;
    }
    if($f&16) {
        $h = strpos($d, chr(0), $h) + 1;
    }
    if($f&2) {
        $h += 2;
    }
    $u = @gzinflate(substr($d, $h));
    if($u == false) {
        $u = $d;
    }
    return $u;
}

它按预期工作,但我打开了错误报告,我得到了这两个错误

警告:strpos():偏移量不包含在字符串中

警告:gzinflate():数据错误

这些警告是指上面已被错误抑制的代码位,对如何修复它们有任何想法吗?

谢谢

4

1 回答 1

1

您是否尝试过简单地使用gzdecode()

您的标头解码看起来正确。您应该通过检查 0x1f、0x8b、8 的前三个字节来检查您的 gzip 流是否真的从您认为的位置开始。

于 2012-05-21T19:59:02.960 回答