使用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 zip文件解压类代码
Dec 02 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
php查看网页源代码的方法
Mar 13 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 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
PHP 存储文本换行实现方法
2010/01/05 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
详解JavaScript函数
2015/12/01 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
python插入排序算法的实现代码
2013/11/21 Python
python简单实现获取当前时间
2016/08/27 Python
Python 多线程实例详解
2017/03/25 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
selenium如何定位span元素的实现
2021/01/13 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
房地产广告词大全
2014/03/19 职场文书
房产委托公证书样本
2014/04/04 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
2015年社区工作总结
2015/04/08 职场文书
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js