gzip文件和字符串解压实例教程

作者:网络 来源:佚名 更新时间:2009-01-04 12:11:22 点击:

要采集一个网站,目标站采用了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;
}
}

调用方法很简单:

以下为引用的内容:

$[email protected]_get_contents("http://www.itlearner.com");
echo gzdecode($f);

商业源码热门下载www.html.org.cn