使用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 相关文章推荐
PHP 数组入门教程小结
May 20 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
php4与php5的区别小结(配置异同)
Dec 20 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php中apc缓存使用示例
Dec 25 PHP
destoon二次开发入门示例
Jun 20 PHP
两种设置php载入页面时编码的方法
Jul 29 PHP
PHP中的日期加减方法示例
Aug 21 PHP
PHP中使用BigMap实例
Mar 30 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
Laravel实现ORM带条件搜索分页
Oct 24 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中的正规表达式(一)
2006/10/09 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
深入php数据采集的详解
2013/06/02 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
js实现移动端轮播图
2020/12/21 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
党员党性分析材料
2014/02/17 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
python中if和elif的区别介绍
2021/11/07 Python