使用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连接Oracle for NT 远程数据库
Oct 09 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
php cookie 详解使用实例
Nov 03 PHP
php连接mysql数据库
Mar 21 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
Bootstrap基础学习
2015/06/16 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
python3中布局背景颜色代码分析
2020/12/01 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
高等教育学自荐书范文
2014/02/10 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python爬虫之爬取笔趣阁小说
2021/04/22 Python