使用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实现文件上传二法
Oct 09 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
Symfony2函数用法实例分析
Mar 18 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
python安装scipy的方法步骤
2019/06/26 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
介绍Java的内部类
2012/10/27 面试题
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
物业电工岗位职责
2013/11/20 职场文书
实习生评语
2014/04/26 职场文书
企业承诺书怎么写
2014/05/24 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
合同纠纷调解书
2015/05/20 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
Python包argparse模块常用方法
2021/06/04 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
python实现双向链表原理
2022/05/25 Python
 python中的元类metaclass详情
2022/05/30 Python
GPU服务器的多用户配置方法
2022/07/07 Servers