使用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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
php实现的MySQL通用查询程序
Mar 11 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
PHP生成Gif图片验证码
Oct 27 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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中多维数组的foreach遍历示例
2014/06/13 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
php7性能提升的原因详解
2019/10/13 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
vue项目实战总结篇
2018/02/11 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
社区安全检查制度
2014/02/03 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
写自荐信的注意事项
2014/03/09 职场文书
致共产党员倡议书
2014/04/16 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
早恋主题班会
2015/08/14 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android