使用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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
收集的php编写大型网站问题集
Mar 06 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
php常用表单验证类用法实例
Jun 18 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php use和include区别总结
Oct 13 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
javascript生成大小写字母
2015/07/03 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python如何实现文本转语音
2016/08/08 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
线程同步的方法
2016/11/23 面试题
销售自荐信
2013/10/22 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
2015元旦节寄语
2014/12/08 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
创业计划书之溜冰场
2019/10/25 职场文书