php中gzip对文件或字符串解压缩的例子
本以为,对于使用gzip压缩后传输的网页,本来应该只要发送一个http头 Accept-Encoding: identity或干脆不发送这个头等,即可使目标站返回未经gzip压缩的页面。
实际情况却是:目标站无视客户端的请求,仍然返回gzip数据,造成乱码。
因此,就需要考虑对gzip后的php文件进行解压了,用内置的gzdecode函数即可。
配置了半天也无法支持gzdecode函数,只好用如下的变通方式,实现了想要的功能:
/**
* php自定义gzdecode解压缩gzip文件
* edit www.jbxue.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;
}
}
?>
调用:
$f=@file_get_contents(http://www.jbxue.com);
echo gzdecode($f);
?>
您可能感兴趣的文章:
PHP开启gzip压缩的二种方法
asp.net中如何用GZip压缩和解压
php中gzip对文件或字符串解压缩的例子
php 字符串压缩方法对比分析
IIS开启Gzip压缩失败的原因与解决办法
PHP开启Gzip页面没有输出的解决方法
生产环境中遇到的IIS启用GZip的问题
教你如何配置Apache的Gzip模块
读写接口
php压缩函数(gzcompress gzuncompress)压缩字符串