使用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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
目录,文件操作详谈―PHP
Nov 25 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
PHP内核探索:变量概述
Jan 30 PHP
php中rename函数用法分析
Nov 15 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
如何离线执行php任务
Feb 21 PHP
PHP数组常用函数实例小结
Aug 20 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 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
德劲1103的维修打理经验
2021/03/02 无线电
php防止网站被刷新的方法汇总
2014/12/01 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
Python数据类型详解(四)字典:dict
2016/05/12 Python
python-numpy-指数分布实例详解
2019/12/07 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
华润集团网上药店:健一网
2016/09/19 全球购物
数控专业毕业生求职信范文
2013/09/21 职场文书
电子商务专业实习生自我鉴定
2013/09/24 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
解除租房协议书
2014/12/03 职场文书
新闻稿怎么写
2015/07/18 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书