使用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 insert语法详解
Jun 07 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
php基础学习之变量的使用
Jun 09 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 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实现文件下载详解
2014/11/27 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
跟老齐学Python之做一个小游戏
2014/09/28 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python常用库推荐
2016/12/04 Python
Python实现购物车程序
2018/04/16 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python 阶乘累加和的实例
2019/02/01 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
介绍java中初始化块的使用
2012/09/11 面试题
入党积极分子自我鉴定范文
2014/03/25 职场文书
销售开票员岗位职责
2015/04/15 职场文书
525心理健康活动总结
2015/05/08 职场文书
z-index不起作用
2021/03/31 HTML / CSS