使用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+DBM的同学录程序(3)
Oct 09 PHP
PHP安全性漫谈
Jun 28 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
PHP实现更改hosts文件的方法示例
Aug 08 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
设定php简写功能的方法
Nov 28 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
javascript的函数
2007/01/31 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python开发的实用计算器完整实例
2017/05/10 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
介绍一下write命令
2012/09/24 面试题
店长岗位的工作内容
2013/11/12 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
企业员工培训感言
2014/02/26 职场文书
个人委托书范本
2014/04/02 职场文书
促销活动总结报告
2014/04/26 职场文书
经营管理策划方案
2014/05/22 职场文书
会计学自荐信
2014/06/03 职场文书
2015年植树节活动总结
2015/02/06 职场文书
同事离别感言
2015/08/04 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB