zoukankan      html  css  js  c++  java
  • 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);   
  • 相关阅读:
    [转]system函数返回值探究
    [转]bat中的特殊字符,以及需要在bat中当做字符如何处理
    [转]null和""以及==与equals的区别
    粘包问题
    并发编程
    GIL锁
    五种IO模型
    css选择器
    并发与串行
    模块(二)
  • 原文地址:https://www.cnblogs.com/hgj123/p/4580380.html
Copyright © 2011-2022 走看看