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

yipeiwu_com6年前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;

相关文章

在项目中寻找代码的坏命名

在项目中寻找代码的坏命名

常做的和常想的事情 晦涩的if条件 1)对于||的处理                   &...

PHP设计模式之工厂模式(Factory Pattern)的讲解

面向对象编程中,工厂模式是我们最常用的实例化对象模式,工厂类就是一个专门用来创建其它对象的类,工厂类在多态性编程实践中是非常重要的。它允许动态替换类,修改配置,会使应用程序更加灵活。掌握...

推荐十款免费 WordPress 插件

推荐十款免费 WordPress 插件

2015必备wordpress插件列表。为了增强wordpress站点,一些优秀有效的免费wordpress 插件是必不可少的。 WordPress 插件用于提升 wordpress...

10个对初学者非常有用的PHP技巧

本文介绍一些关于改善和优化PHP代码的提示和技巧,供大家参考,具体内容如下 1.不要使用相对路径,要定义一个根路径 这样的代码行很常见: require_once('../../li...

php解析xml方法实例详解

本文以实例形式详细讲述了php解析xml方法。分享给大家供大家参考。具体分析如下: books.xml文件如下: <?xml version="1.0" encodin...