找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1327|回复: 0
打印 上一主题 下一主题

使用php判断网页是否gzip压缩

[复制链接]

2487

主题

2487

帖子

7391

积分

论坛元老

Rank: 8Rank: 8

积分
7391
跳转到指定楼层
楼主
发表于 2018-2-14 08:16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            昨天晚上群里有朋友采集网页时发现file_get_contents 获得的网页保存到本地为乱码,响应的header 里 Content-Encoding:gzip
但在浏览器里看是正常的。
因为我有过相关经验马上发现是网站开启了gzip而file_get_contents 获得的是压缩过的页面,而不是解压过的页面(不知道是不是要file_get_conttents 请求网页时带上相应的参数,直接获得没有被gzip压缩过的网页?)
刚好我前不久刚看到可以用读取文件的前2个字节判断文件类型。群里面的朋友也说gzip压缩过的网页(gbk编码)前2字节是 1F 8B 于是就可以判断网页是否gzip压缩过。
代码如下:
[U]复制代码[/U] 代码如下:
//米尔军事网采用 gzip压缩网页
//file_get_contents 直接获得的网页是乱码。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");   
//只读2字节  如果为(16进制)1f 8b (10进制)31 139则开启了gzip ;
$bin = fread($file, 2);  
fclose($file);   
$strInfo = @unpack("C2chars", $bin);   
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);   
$isGzip = 0;   
switch ($typeCode)   
{
    case 31139:      
      //网站开启了gzip
        $isGzip = 1;
        break;
    default:   
        $isGzip = 0;
}   
$url = $isGzip ? "compress.zlib://".$urlurl; // 三元表达式
$mierHtml = file_get_contents($url); //获得米尔军事网数据
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;
            
            
您可能感兴趣的文章:
  • php中ob(Output Buffer 输出缓冲)函数使用方法
  • 用PHP ob_start()控制浏览器cache、生成html实现代码
  • php ob_flush,flush在ie中缓冲无效的解决方法
  • 用php的ob_start来生成静态页面的方法分析
  • PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
  • php缓冲 output_buffering和ob_start使用介绍
  • PHP使用ob_start生成html页面的方法
  • php使用ob_start()实现图片存入变量的方法
  • php中ob_get_length缓冲与获取缓冲长度实例
  • php读取远程gzip压缩网页的方法
  • php中ob函数缓冲机制深入理解
  • php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端