php 判断页面或图片是否经过gzip压缩的方法


Posted in PHP onApril 05, 2017

使用php判断页面或图片是否经过gzip压缩方法

1.使用get_headers

页面内容

<?php
ob_start('ob_gzhandler'); // 开启gzip,屏蔽则关闭

$data = array(
 array('name'=>'one','value'=>1),
 array('name'=>'two','value'=>2),
 array('name'=>'three','value'=>3)
);

header('content-type:application/json');
echo json_encode($data);
?>

使用get_headers判断是否使用gzip压缩

<?php
$url = 'http://www.example.com/';
var_dump(check_gzip($url));

/**
 * 判断url是否经过gzip压缩
 * @param String $url 来源
 * @param Boolean
 */
function check_gzip($url){
 $header = get_headers($url, 1);
 if(isset($header['Vary']) && $header['Vary']=='Accept-Encoding'){
  return true;
 }
 return false;
}
?>

测试结果:

当加上ob_gzhandler时,返回true,删除后返回false

2.使用curl

图片

<?php
header('content-type:image/jpeg');
ob_start('ob_gzhandler'); // 开启gzip,屏蔽则关闭
echo file_get_contents('test.jpg');
?>

使用curl判断是否使用gzip压缩

<?php
$url = 'http://www.example.com/';
var_dump(check_gzip($url));

/**
 * 判断url是否经过gzip压缩
 * @param String $url 来源
 * @param Boolean
 */
function check_gzip($url){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER, 1);   // 输出header信息
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 返回的信息不直接输出
 curl_setopt($ch, CURLOPT_ENCODING, '');  // 不限制编码类型
 $response = curl_exec($ch);
 if(!curl_errno($ch)){
  $info = curl_getinfo($ch);
  // 获取header
  $header_size = $info['header_size'];
  $header_str = substr($response, 0, $header_size);
  $filter = array("\r\n", "\r");
  $header_str = str_replace($filter, PHP_EOL, $header_str);

  // 检查content-encoding
  preg_match('/Content-Encoding: (.*)\s/i', $header_str, $matches);
  if(isset($matches[1]) && $matches[1]=='gzip'){
   return true;
  }
 }
 return false;
}
?>

测试结果:

当加上ob_gzhandler时,返回true,删除后返回false

以上这篇php 判断页面或图片是否经过gzip压缩的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
php数组键值用法实例分析
Feb 27 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
php注册审核重点解析(数据访问)
May 23 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
通过php动态传数据到highcharts
Apr 05 #PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 #PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 #PHP
php实现用户登陆简单实例
Apr 04 #PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 #PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 #PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 #PHP
You might like
SONY ICF-SW7600的电路分析
2021/03/02 无线电
用PHP+MySql编写聊天室
2006/10/09 PHP
常用的php ADODB使用方法集锦
2008/03/25 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jquery实现图片预加载
2015/12/25 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python实现宿舍管理系统
2019/11/22 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
互动出版网:专业书籍
2017/03/21 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
用友笔试题目
2016/10/25 面试题
十佳好少年事迹材料
2014/08/21 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript