使用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学习之PHP变量
Oct 09 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php 如何获取数组第一个值
Aug 06 PHP
PHP生成RSS文件类实例
Dec 05 PHP
标准PHP的AES加密算法类
Mar 12 PHP
php实现将Session写入数据库
Jul 26 PHP
php生成动态验证码gif图片
Oct 19 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
php微信支付之公众号支付功能
May 30 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 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 正则学习实例
2008/07/30 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
python新手学习可变和不可变对象
2020/06/11 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
AJAX的全称是什么
2012/11/06 面试题
污水厂厂长岗位职责
2014/01/04 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
人与自然观后感
2015/06/16 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技