当前位置: 首页 > news >正文

php对gzip文件或者字符串解压实例参考

要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding: identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求,仍然返回gzip数据,造成乱码。
      其实php对gzip解压很简单,用内置的gzdecode函数就可以了,不过很可惜我配置了半天也无法支持gzdecode函数,所以只好变通一下:  
复制代码 代码如下:

if (!function_exists('gzdecode')) {      
    function gzdecode ($data) {      
        $flags = ord(substr($data, 3, 1));      
        $headerlen = 10;      
        $extralen = 0;      
        $filenamelen = 0;      
        if ($flags & 4) {      
            $extralen = unpack('v' ,substr($data, 10, 2));      
            $extralen = $extralen[1];      
            $headerlen += 2 + $extralen;      
        }      
        if ($flags & 8) // Filename      
            $headerlen = strpos($data, chr(0), $headerlen) + 1;      
        if ($flags & 16) // Comment      
            $headerlen = strpos($data, chr(0), $headerlen) + 1;      
        if ($flags & 2) // CRC at end of file      
            $headerlen += 2;      
        $unpacked = @gzinflate(substr($data, $headerlen));      
        if ($unpacked === FALSE)      
              $unpacked = $data;      
        return $unpacked;      
     }      
} 




调用方法很简单:  
复制代码 代码如下:

$f=@file_get_contents("http://www.jb51.net");       
echo gzdecode($f);   

 

相关文章:

  • POJ-1637 Sightseeing tour(通过网络流判定混合图的欧拉回路)
  • 哈密顿图和欧拉图知识小结
  • POJ-2689 Prime Distance(区间素数筛--经典题)
  • c语言移位操作
  • HDU-6069 Counting Divisors - 2017 Multi-University Training Contest - Team 4(分解质因子区间筛法)
  • HDU-6073 Matching In Multiplication - 2017 Multi-University Training Contest - Team 4(拓扑+连通块处理)
  • 我的Java开发学习之旅------Java经典排序算法之插入排序
  • POJ-3352 Road Construction(边双连通分量+缩点)
  • 445port入侵详细解释
  • UVALive-5013 Similarity(二分图最大权匹配)
  • Cisco ASA-ASA 8.2-L2L ***
  • HDU-3440 House Man(差分约束系统)
  • 怎么安装docker registry
  • HDU-3666 THE MATRIX PROBLEM(差分约束系统判断存在与否+特殊剪枝)
  • Thinkphp学习04
  • [nginx文档翻译系列] 控制nginx
  • [译]前端离线指南(上)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CAP 一致性协议及应用解析
  • IDEA 插件开发入门教程
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Logstash 参考指南(目录)
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL几个简单SQL的优化
  • ng6--错误信息小结(持续更新)
  • Vue学习第二天
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 普通函数和构造函数的区别
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 QuickBI 搭建酷炫可视化分析
  • 世界上最简单的无等待算法(getAndIncrement)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小试R空间处理新库sf
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Semaphore
  • 说说我为什么看好Spring Cloud Alibaba
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #etcd#安装时出错
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (Java数据结构)ArrayList
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)Linux 多线程条件变量同步
  • (转载)深入super,看Python如何解决钻石继承难题
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .mysql secret在哪_MYSQL基本操作(上)
  • .naturalWidth 和naturalHeight属性,
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET下ASPX编程的几个小问题