使用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个人网站架设连环讲(三)
Oct 09 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
php中几种常见安全设置详解
Apr 06 PHP
sphinx增量索引的一个问题
Jun 14 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
php表单请求获得数据求和示例
May 15 PHP
php中opendir函数用法实例
Nov 15 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JavaScript 学习笔记(十五)
2010/01/28 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Python中的类学习笔记
2014/09/23 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
详解django.contirb.auth-认证
2018/07/16 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python 装饰器的使用示例
2020/10/10 Python
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
经贸日语专业个人求职信
2013/12/13 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
个人工作主要事迹
2014/05/08 职场文书
副总经理任命书
2014/06/05 职场文书
食品安全承诺书范文
2014/08/29 职场文书
大学生见习报告总结
2014/11/04 职场文书
北京英文导游词
2015/02/12 职场文书
感恩节寄语2015
2015/03/24 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书