使用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 xml 入门学习资料
Jan 01 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
php简单的上传类分享
May 15 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
PHP RabbitMQ消息列队
May 11 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/04/25 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php如何连接sql server
2015/10/16 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
Python返回数组/List长度的实例
2018/06/23 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Python decimal模块使用方法详解
2020/06/08 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
网络安全方面的面试题
2016/01/07 面试题
小学生检讨书大全
2014/02/06 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
导师工作推荐信
2015/03/27 职场文书
学校团代会开幕词
2016/03/04 职场文书
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL