使用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 flush类输出缓冲剖析
Oct 19 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
PHP 面向对象详解
Sep 13 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
php调用新浪短链接API的方法
Nov 08 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
PHP创建自己的Composer包方法
Apr 09 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中的Base62类(适用于数值转字符串)
2013/08/12 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
python中实现php的var_dump函数功能
2015/01/21 Python
Python字符串切片操作知识详解
2016/03/28 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python中正则表达式与模式匹配
2019/05/07 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Python如何实现的二分查找算法
2020/05/27 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
夜大毕业生自我评价分享
2013/11/10 职场文书
高中自我评价范文
2014/01/27 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
素质教育标语
2014/06/27 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript