使用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
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
一个php导出oracle库的php代码
Apr 20 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 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获取新浪微博数据API实例
2013/11/12 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue.js 微信支付前端代码分享
2018/02/10 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
vue之延时刷新实例
2019/11/14 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
安装dbus-python的简要教程
2015/05/05 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
利用python循环创建多个文件的方法
2018/10/25 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
大学生求职自荐信
2013/12/12 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
军训考核自我鉴定
2014/02/13 职场文书
2014年德育工作总结
2014/11/20 职场文书
三方合作意向书范本
2015/05/09 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang
Java完整实现记事本代码
2022/06/16 Java/Android