使用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 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP大文件及断点续传下载实现代码
Aug 18 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
第六节--访问属性和方法
2006/11/16 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
js获取系统的根路径实现介绍
2013/09/08 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
JavaScript手机振动API
2016/06/11 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python判断自身是否正在运行的方法
2019/08/08 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
经典的班主任推荐信
2013/10/28 职场文书
最新党员思想汇报
2014/01/01 职场文书
医疗纠纷协议书
2014/04/16 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
入股合作协议书
2014/10/12 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
一个都不能少观后感
2015/06/04 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
基于Python实现股票收益率分析
2022/04/02 Python