使用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 相关文章推荐
session 的生命周期是多长
Oct 09 PHP
php中变量及部分适用方法
Mar 27 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
PHP生成RSS文件类实例
Dec 05 PHP
php中fsockopen用法实例
Jan 05 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
项目中应用Redis+Php的场景
May 22 PHP
详解PHP归并排序的实现
Oct 18 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
CodeIgniter框架数据库基本操作示例
May 24 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
Yii框架form表单用法实例
2014/12/04 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
jquery获取选中的文本和值的方法
2014/07/08 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
Node.js readline模块与util模块的使用
2018/03/01 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python实现批量修改文件名实例
2015/07/08 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
仓库主管岗位职责
2014/03/02 职场文书
李敖北大演讲稿
2014/05/24 职场文书
教师见习报告范文
2014/11/03 职场文书
银行求职信范文
2019/05/13 职场文书