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


Posted in PHP onJune 25, 2013

昨天晚上群里有朋友采集网页时发现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 相关文章推荐
文件上传程序的全部源码
Oct 09 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php获取远程文件大小
Oct 20 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 #PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 #PHP
提升PHP性能的21种方法介绍
Jun 25 #PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 #PHP
解析php取整的几种方式
Jun 25 #PHP
关于PHP内存溢出问题的解决方法
Jun 25 #PHP
关于PHP session 存储方式的详细介绍
Jun 25 #PHP
You might like
社区(php&&mysql)五
2006/10/09 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
python学习数据结构实例代码
2015/05/11 Python
给Python入门者的一些编程建议
2015/06/15 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
简单谈谈python的反射机制
2016/06/28 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
专科应届生求职信
2013/11/24 职场文书
银行优秀员工事迹
2014/02/06 职场文书
超市商业计划书
2014/05/04 职场文书
销售活动策划方案
2014/08/26 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书