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

yipeiwu_com7年前PHP代码库
昨天晚上群里有朋友采集网页时发现file_get_contents 获得的网页保存到本地为乱码,响应的header 里 Content-Encoding:gzip
但在浏览器里看是正常的。
因为我有过相关经验马上发现是网站开启了gzip而file_get_contents 获得的是压缩过的页面,而不是解压过的页面(不知道是不是要file_get_conttents 请求网页时带上相应的参数,直接获得没有被gzip压缩过的网页?)
刚好我前不久刚看到可以用读取文件的前2个字节判断文件类型。群里面的朋友也说gzip压缩过的网页(gbk编码)前2字节是 1F 8B 于是就可以判断网页是否gzip压缩过。
代码如下:
复制代码 代码如下:

//米尔军事网采用 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://".$url:$url; // 三元表达式
$mierHtml = file_get_contents($url); //获得米尔军事网数据
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;

相关文章

PHP去除空数组且数组键名重置的讲解

php空数组的话,能够运用 php函数array_filter() . array array_filter ( array [, callback callback] ) ar...

crontab无法执行php的解决方法

本文分析了crontab无法执行php的解决方法。分享给大家供大家参考,具体如下: 用crontab跑php程序时,如何去调试,各人有各人的方法。我也有套方法,看一下,我是如何解决cro...

PHP连接操作access数据库实例

因为之前做的PingSwitch要做一个WEB展示的前端,因为一开始用了Delphi和access的结构,而Delphi与MySQL的连接又相对麻烦,最后只能选择用PHP+Access的...

PHP基于递归实现的约瑟夫环算法示例

本文实例讲述了PHP基于递归实现的约瑟夫环算法。分享给大家供大家参考,具体如下: 约瑟夫环问题: 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌...

php中explode与split的区别介绍

首先来看下两个方法的定义: 函数原型:array split (string $pattern, string $string [, int $limit]) 函数原型:array ex...