本以为,对于使用gzip压缩后传输的网页,本来应该只要发送一个http头 Accept-Encoding: identity或干脆不发送这个头等,即可使目标站返回未经gzip压缩的页面。
实际情况却是:目标站无视客户端的请求,仍然返回gzip数据,造成乱码。
因此,就需要考虑对gzip后的php文件进行解压了,用内置的gzdecode函数即可。
配置了半天也无法支持gzdecode函数,只好用如下的变通方式,实现了想要的功能:
复制代码 代码示例:
<?php
/**
* php自定义gzdecode解压缩gzip文件
* edit www.jb200.com
*/
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;
}
}
?>
调用:
复制代码 代码示例:
<?php
$f=@
file_get_contents(http://www.jb200.com);
echo gzdecode($f);
?>