使用ob系列函数实现PHP网站页面静态化,实例讲解PHP页面静态化

用户访问index.php,如果存在index.html且在有效期内,则直接输出index.html,否则去生成index.html

实例讲解PHP页面静态化,实例讲解php静态

页面静态化,顾名思义是将动态的PHP转化为静态的Html,流程如下图

图片 1

用户访问index.php,如果存在index.html且在有效期内,则直接输出index.html,否则去生成index.html

file_put_contents()输出静态文件

ob_start()开启PHP缓冲区

ob_get_contents()获取缓冲区内容

ob_clean()清空缓冲区

ob_get_clean()相当于ob_get_contents()+ob_clean()

代码示例

<?php

if (file_exists('./html/index.html') && time() - filectime('./html/index.html') < 30) {
 require_once './html/index.html';
} else {
 // 引入数据库配置
 require_once "./config/database.php";
 // 引入Medoo类库
 require_once "./libs/medoo.php";
 // 实例化db对象
 $db = new medoo($config);
 // 获取数据
 $users = $db->select('user', ['uid', 'username', 'email']);
 // 引入模板
 require_once "./templates/index.php";
 // 写入html
 file_put_contents('./html/index.html', ob_get_contents());
}

页面静态化,顾名思义是将动态的PHP转化为静态的Html,流程如下图
用户访问index.php,如果存在…

您可能感兴趣的文章:

  • ThinkPHP
    3.2.3实现页面静态化功能的方法详解
  • PHP
    实现页面静态化的几种方法
  • 利用php的ob缓存机制实现页面静态化方法
  • 详解php实现页面静态化原理
  • PHP实现页面静态化的超简单方法
  • PHP实现HTML页面静态化的方法
  • 实例讲解PHP页面静态化
<?php

if (file_exists('./html/index.html') && time() - filectime('./html/index.html') < 30) {
 require_once './html/index.html';
} else {
 // 引入数据库配置
 require_once "./config/database.php";
 // 引入Medoo类库
 require_once "./libs/medoo.php";
 // 实例化db对象
 $db = new medoo($config);
 // 获取数据
 $users = $db->select('user', ['uid', 'username', 'email']);
 // 引入模板
 require_once "./templates/index.php";
 // 写入html
 file_put_contents('./html/index.html', ob_get_contents());
}

用户访问的时候就direct到这个html页面上就可以了。

ob_clean()清空缓冲区

将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。

file_put_contents()输出静态文件

7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用
flush()。

图片 2

该段代码就会预先形成一个test.html,说白了其实就是用空间换取时间,像新闻类网站,发布的内容基本上写完是不会变了,比较适合静态化成html。

代码示例

4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回
FALSE。

ob_start()开启PHP缓冲区

两者在90%以上的连接中,至少相差150ms。相对于复杂的php来说,html节约下来的运算量还是不少的。

页面静态化,顾名思义是将动态的PHP转化为静态的Html,流程如下图

静态化:

ob_get_contents()获取缓冲区内容

另附相关函数简介

ob_get_clean()相当于ob_get_contents()+ob_clean()

静态化的作用:

您可能感兴趣的文章:

  • ThinkPHP
    3.2.3实现页面静态化功能的方法详解
  • PHP
    实现页面静态化的几种方法
  • 利用php的ob缓存机制实现页面静态化方法
  • 详解php实现页面静态化原理
  • PHP实现页面静态化的超简单方法
  • PHP实现HTML页面静态化的方法
  • 使用ob系列函数实现PHP网站页面静态化
<?php
for($i=0;$i<1000;$i++){
 echo "bull<br>";
}
?>

图片 3

简单的用apache benchmark测试一下效果:

静态化之前:

其他还有模板替换法,opcache等方法。

提高网站的响应速度,降低服务器的负载;
用于搜索引擎的SEO;
利用PHP输出buffer直接写成html,定时后台定时扫一遍网站,是比较容易实现的网页静态化。

3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回
FALSE 。

1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。

5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。

<?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>";
?>

ab.exe -n1000 -c10

6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!

2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。