使用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中删除变量时unset()和null的区别分析
Jan 27 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
apache和PHP如何整合在一起
Oct 12 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
php如何获取Http请求
Apr 30 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 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取进制余数函数代码
2012/01/19 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php简单分页类实现方法
2015/02/26 PHP
php去掉文件前几行的方法
2015/07/29 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
python访问纯真IP数据库的代码
2011/05/19 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python 读取修改pcap包的例子
2019/07/23 Python
保送生自荐信范文
2013/10/06 职场文书
考博导师推荐信范文
2015/03/27 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
python munch库的使用解析
2021/05/25 Python
新手入门Mysql--概念
2021/06/18 MySQL
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技