php对gzip文件或者字符串解压实例参考

要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding: identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求,仍然返回gzip数据,造成乱码。

      其实php对gzip解压很简单,用内置的gzdecode函数就可以了,不过很可惜我配置了半天也无法支持gzdecode函数,所以只好变通一下:  

复制代码 代码如下:



if (!function_exists('gzdecode')) {      

    function gzdecode ($data) {      

        $flags = ord(substr($data, 3, 1));      

        $headerlen = 10;      

        $extralen = 0;      

        $filenamelen = 0;      

        if ($flags & 4) {      

            $extralen = unpack('v' ,substr($data, 10, 2));      

            $extralen = $extralen[1];      

            $headerlen += 2 + $extralen;      

        }      

        if ($flags & 8) // Filename      

            $headerlen = strpos($data, chr(0), $headerlen) + 1;      

        if ($flags & 16) // Comment      

            $headerlen = strpos($data, chr(0), $headerlen) + 1;      

        if ($flags & 2) // CRC at end of file      

            $headerlen += 2;      

        $unpacked = @gzinflate(substr($data, $headerlen));      

        if ($unpacked === FALSE)      

              $unpacked = $data;      

        return $unpacked;      

     }      

} 









调用方法很简单:  

复制代码 代码如下:



$f=@file_get_contents("http://www.jb51.net");       

echo gzdecode($f);   

 

你可能感兴趣的:(GZip)