使用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中在数据库中保存Checkbox数据(2)
Oct 09 PHP
实用函数9
Nov 08 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
PHP基础知识回顾
Aug 16 PHP
memcache命令启动参数中文解释
Jan 13 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
php爬取天猫和淘宝商品数据
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
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python的标准模块包json详解
2017/03/13 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
年度考核自我鉴定
2014/02/02 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
责任担保书范文
2014/05/21 职场文书
大学新闻系求职信
2014/06/03 职场文书
员工安全生产责任书
2014/07/22 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
党员个人总结自评
2015/02/14 职场文书
大学开学感言
2015/08/01 职场文书
旷工检讨书大全
2015/08/15 职场文书
决心书格式及范文
2019/06/24 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers