使用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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
php与php MySQL 之间的关系
Jul 17 PHP
PHP 金额数字转换成英文
May 06 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
比较完整的微信开发php代码
Aug 02 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 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定时执行计划任务的多种方法小结
2011/12/19 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
浅谈Python 递归算法指归
2019/08/22 Python
python中dict()的高级用法实现
2019/11/13 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
Python调用Redis的示例代码
2020/11/24 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
金智子午JAVA面试题
2015/09/04 面试题
介绍一下Linux文件的记录形式
2012/04/18 面试题
单位成立周年感言
2014/01/26 职场文书
连带责任保证书
2014/04/29 职场文书
护理目标管理责任书
2014/07/25 职场文书
80后婚前协议书范本
2014/10/24 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2015入党自传书范文
2015/06/26 职场文书
美容院管理规章制度
2015/08/05 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
护士心得体会范文
2016/01/25 职场文书