使用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文件下载类
Dec 06 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 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生成略缩图代码
2012/07/16 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
tagName的使用,留一笔
2006/06/26 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
AngularJS内置指令
2015/02/04 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
Python内置函数的用法实例教程
2014/09/08 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
几个MySql的面试题
2013/04/22 面试题
英文求职信结束语大全
2013/10/26 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
初中语文教学反思
2014/02/02 职场文书
骨干教师培训方案
2014/05/06 职场文书
学校教研活动总结
2014/07/02 职场文书
工作自我推荐信范文
2015/03/25 职场文书
家长意见书
2015/06/04 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android