使用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转成EXE文件
Oct 09 PHP
第八节--访问方式
Nov 16 PHP
PHP一些有意思的小区别
Dec 06 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
四个PHP非常实用的功能
Sep 29 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
js自带函数备忘 数组
2006/12/29 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
python实现Zabbix-API监控
2018/09/17 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
Sql面试题
2013/03/20 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
大专生自我评价
2014/01/28 职场文书
教师节商场活动方案
2014/02/13 职场文书
教师产假请假条范文
2014/04/10 职场文书
员工生日会策划方案
2014/06/14 职场文书
超市创业计划书
2014/09/15 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
免职通知
2015/04/23 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
python如何为list实现find方法
2022/05/30 Python