使用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在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
php日历[测试通过]
Mar 27 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
php使用websocket示例详解
Mar 12 PHP
php修改指定文件后缀的方法
Sep 11 PHP
跟我学Laravel之快速入门
Oct 15 PHP
学习php开源项目的源码指南
Dec 21 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 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 的反射详解及示例代码
2016/08/25 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python带参数打包exe及调用方式
2019/12/21 Python
python ubplot使用方法解析
2020/01/10 Python
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
社区工作感言
2014/02/21 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
铁路安全事故反思
2014/04/26 职场文书
英语故事演讲稿
2014/04/29 职场文书
创先争优标语
2014/06/27 职场文书
购房意向书
2014/08/30 职场文书
卡特教练观后感
2015/06/08 职场文书
珍爱生命主题班会
2015/08/13 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技