ThinkPHP3.1.3源码分析---php文件压缩zlib.output_compression 和 ob_gzhandler
问题来源:
\ThinkPHP3.1.3_full\ThinkPHP\Lib\Core\App.class.php 中 init()方法
if(C('OUTPUT_ENCODE')){
$zlib = ini_get('zlib.output_compression');
if(empty($zlib)) ob_start('ob_gzhandler');
}
zlib.output_compression 和 ob_gzhandler 是压缩页面内网的方法,
不能同时使用ob_gzhandler() 和 zlib.output_compression。
也要注意使用 zlib.output_compression 要优于 ob_gzhandler()。
使用ob_gzhandler函数有3种方法让它对php进行压缩:
1、在php.ini中设置output_handler = ob_gzhandler
2、在.htaccess中加入php_value output_handler ob_gzhandler
3、在php文件头加上ob_start('ob_gzhandler');
zlib.output_compression方法:
打开php目录下的php.ini文件,找到zlib.output_compression = Off,改成zlib.output_compression = On,
再把;zlib.output_compression_level前面的;去掉,后面的-1改成1~5的数值,
这样便可以实现所有php页面的gzip效果。
需要说明的是以下几点:
一、;zlib.output_handler必须保持注释掉,因为此参数和前面的设置冲突——官方的说法。
二、一般情况下缓存是4k(output_buffering = 4096)。
三、zlib.output_compression_level 建议参数值是1~5,6以实际压缩效果提升不大,cpu占用却是几何增长。
example01: ob_gzhandler方法IE低版本的处理:
<?php
/*
The Accept-Encoding header can't be trusted in IE5 and unpatched IE6;
there are gzip-related bugs in this browsers.
The docs don't mention if ob_gzhandler knows about these,
so you might want to use the function below:
*/ function isBuggyIe() {
$ua = $_SERVER['HTTP_USER_AGENT'];
// quick escape for non-IEs
if (0 !== strpos($ua, 'Mozilla/4.0 (compatible; MSIE ')
|| false !== strpos($ua, 'Opera')) {
return false;
}
// no regex = faaast
$version = (float)substr($ua, 30);
return (
$version < 6
|| ($version == 6 && false === strpos($ua, 'SV1'))
);
} // usage:
isBuggyIe() || ob_start("ob_gzhandler");
example02: css/jss文件的处理
<?php
/*
It is also possible to use ob_gzhandler to compress css and javascript files,
however some browsers such as firefox expect content type text/css on css files.
To get around this send a content type header:
*/ ob_start('ob_gzhandler');
?> .... your css content ... <?php
header("Content-Type: text/css"); //或header("Content-Type: text/javascript");
header("Content-Length: ".ob_get_length());
ob_end_flush();
//待补充...
ThinkPHP3.1.3源码分析---php文件压缩zlib.output_compression 和 ob_gzhandler的更多相关文章
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- Yii2 源码分析 入口文件执行流程
Yii2 源码分析 入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...
- Tornado源码分析 --- 静态文件处理模块
每个web框架都会有对静态文件的处理支持,下面对于Tornado的静态文件的处理模块的源码进行分析,以加强自己对静态文件处理的理解. 先从Tornado的主要模块 web.py 入手,可以看到在App ...
- f2fs源码分析之文件读写过程
本篇包括三个部分:1)f2fs 文件表示方法: 2)NAT详细介绍:3)f2fs文件读写过程:4) 下面详细阐述f2fs读写的过程. 管理数据位置关键的数据结构是node,node包括三种:inode ...
- cocos2dx 3.6源码分析之文件路径
cocos2dx中资源文件都放在Resources目录中,编译后会自动复制到exe所在的目录中. 核心类是FileUtils类,一个单例类. 三个重要的函数 void addSearchPath(co ...
- django源码分析——静态文件staticfiles中间件
本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ...
- mybatis(五):源码分析 - mapper文件解析流程
- mybatis(五):源码分析 - mapper文件加载流程
- mybatis(五):源码分析 - config文件加载流程
详细的可以参考https://blog.csdn.net/weixin_33850890/article/details/88112849
随机推荐
- java 小程序--杨辉三角
1. 代码 public static void main(String[] args) { ][]; ; i<; i++){ triangle[i] = ]; ; j<=i; j++){ ...
- Linux下安装mongodb详细过程
本次安装mongodb使用yum.repo方式.详细过程请参考,也列出一些安装过程中的错误,欢迎指正. mongodb版本:3.0 先在linux下cd 到 /etc/yum.repos.d/ 新建脚 ...
- MYSQL数据库如何赋予远程某个IP访问权限
1. 授权用户root使用密码jb51从任意主机连接到mysql服务器:代码如下:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'jb ...
- Java在方法作用域内创建的内部类
在方法作用域内创建的内部类,用来实现一个接口 /** * Created by xfyou on 2016/11/3. * Java内部类演示 */ public class Parcel3 { pu ...
- 我开发 wangEditor-mobile 的故事
wangEditor-mobile 是一款适用于手机.手指操作的富文本编辑器,wangEditor-mobile 官网 1. 写在前面 其实,我一开始并没有想做什么手机端操作的富文本编辑器. w ...
- jQuery自定义漂亮的下拉框插件8种效果
jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 实例代码 <body class="demo-1"> ...
- BitcoinJS - 支持比特币交易的 JavaScript 库
BitcoinJS 是一个干净,可读的 JavaScript 开发库,用于比特币交易.支持 Node.js 平台和浏览器端.已有超过150万的钱包用户在使用, BitcoinJS 是几乎所有的 Web ...
- 实例之HTML标签属性
鼠标放在图片上会显示说明文字的代码 <img src="图片地址" width=620 height=138 border=0 title="说明文字" ...
- javascript数据类型理解整理
起因:关于数据类型这块,自己看了很多遍相关的资料,每次查看和实践都有一些体会和理解:但又感到没有理解透,总是差一点,最近又在看这块的内容,加上最近的积累,做个相关笔记 ECMAScript数据类型:1 ...
- 最近喜欢听的英文歌——Because Of You - Kelly Clarkson
没了解过歌曲背景,总觉得像是一首女儿唱给母亲的歌= =也许是我的错觉 I will not make the same mistakes that you did 我不会重复你犯过的错误 I will ...