使用ob系列函数实现PHP网站页面静态化


Posted in PHP onAugust 13, 2014

将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。

其他还有模板替换法,opcache等方法。

静态化的作用:

提高网站的响应速度,降低服务器的负载;
用于搜索引擎的SEO;
利用PHP输出buffer直接写成html,定时后台定时扫一遍网站,是比较容易实现的网页静态化。

静态化之前:

<?php
for($i=0;$i<1000;$i++){
 echo "bull<br>";
}
?>

静态化:

<?php
ob_start();
for($i=0;$i<1000;$i++){
 echo "bull<br>";
}
$str = ob_get_contents();
ob_end_clean();
$fp = fopen("test.html","w");
fwrite($fp,$str);
fclose($fp);
echo "<div>success write</div>";
?>

该段代码就会预先形成一个test.html,说白了其实就是用空间换取时间,像新闻类网站,发布的内容基本上写完是不会变了,比较适合静态化成html。

用户访问的时候就direct到这个html页面上就可以了。

简单的用apache benchmark测试一下效果:

ab.exe -n1000 -c10

使用ob系列函数实现PHP网站页面静态化

两者在90%以上的连接中,至少相差150ms。相对于复杂的php来说,html节约下来的运算量还是不少的。

另附相关函数简介

1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。

2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。

4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。

5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。

6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!

7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()。

PHP 相关文章推荐
php获得文件扩展名三法
Nov 25 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
php汉字转拼音的示例
Feb 27 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
PHP实现多关键字加亮功能
Oct 21 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP语法自动检查的Vim插件
Aug 11 #PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 #PHP
Parse正式发布开源PHP SDK
Aug 11 #PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 #PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 #PHP
php向js函数传参的几种方法
Aug 10 #PHP
本地计算机无法启动Apache故障处理
Aug 08 #PHP
You might like
解析php中static,const与define的使用区别
2013/06/18 PHP
PHP实现简易blog的制作
2016/10/24 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
javascript判断office版本示例
2014/04/11 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
通过数据库向Django模型添加字段的示例
2015/07/21 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python新手学习装饰器
2020/06/04 Python
python如何查看安装了的模块
2020/06/23 Python
Django多个app urls配置代码实例
2020/11/26 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
代理人委托书
2014/09/16 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
mysql中关键词exists的用法实例详解
2022/06/10 MySQL