php-ob缓存实现页面静态化

php程序缓存的概念

首先,修改php.ini配置项为

;output_buffering = 4096

来看个例子

//test.php
<?php
for($i = 0; $i < 10; $i++){
    echo $i;
    sleep(1);
}
//效果:浏览器停顿10秒,第十秒才一次输出0123456789

修改代码为

//test.php
<?php
for($i = 0; $i < 10; $i++){
    echo $i;
    sleep(1);
    flush();//将程序缓存的内容强制刷新到浏览器上
}
//效果:浏览器每隔一秒输出一个数字

这就是php程序缓存的概念:test.php从上到下执行,所有的输出都会先放到程序缓存,整个test.php执行完毕,才把程序缓存里的内容打包,发送给浏览器

ob缓存的概念

接下来,再修改php.ini,output_buffering = 4096(去掉前面的分号)

//test.php
<?php
for($i = 0; $i < 10; $i++){
    echo $i;
    sleep(1);
    flush();//将程序缓存的内容刷新到浏览器上
}
//效果:浏览器停顿10秒,第十秒才一次输出0123456789

ob缓存开启时,test.php中的输出先放到了ob缓存,整个test.php执行完毕,才将所有输出结果刷新到程序缓存

ob缓存的特性和相关函数

再看一个例子:
关闭ob缓存,;output_buffering = 4096

//test2.php
<?php
echo 'hello100';
header('charset=utf-8');
echo 'hello200';
//效果:会报错,提示不能修改header头(http协议有head和body,要求head必须在body上)

开启ob缓存,output_buffering = 4096

//test2.php
<?php
echo 'hello100';
header('charset=utf-8');
echo 'hello200';
//效果:不会报错,正常输出。
//执行过程分析:'hello100'放入ob缓存,header放入程序缓存,'hello200'放入ob缓存。test2.php执行完毕,将ob缓存中的'hello100''hello200'刷新到程序缓存中,这样header头信息仍然在ob缓存内容的上面,故不会报错

ob缓存的特性:只缓存输出内容(echo/var_dump/print_r()/html文本),而header信息,是不会执行ob缓存的,直接放在程序缓存

//ob缓存的其他函数
ob_start();
ob_end_flush();//将ob缓存中的内容,刷到程序缓存中!并关闭ob缓存
ob_flush();//将ob缓存中的内容,刷到程序缓存中!但并没有关闭ob缓存
ob_get_contents();//获取当前ob缓存中的内容
ob_clean();//将ob缓存中的内容清空
ob_end_clean();//将ob缓存中的内容清空,并关闭ob缓存

ob缓存的应用

实现页面静态化,代码不优雅,理解思路即可

<?php

    $id=$_REQUEST['id'];

    //判断缓存文件是否存在,如果存在,直接输出
    if(file_exists('content'.$id.'.html')){
      echo file_get_contents('content'.$id.'.html');
      return;
    }

    //开启缓存机制
    ob_start();

    //到数据库中查询所需要的内容
    $conn=mysql_connect("localhost","root","root");
    mysql_select('db');
    mysql_query('set names utf8');

    $sql="select content from table_name where id=$id";
    $res=mysql_query($sql);
    $row=mysql_fetch_assoc($res);
    $content=$row[0];

    mysql_free_result($res);
    mysql_close($conn);
    echo $content;
    //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出                               
    file_put_contents('content'.$id.'.html',ob_get_contents());

?>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值