谭兄

导航

 

 

先看一个简单的例子

<?php
    ob_start();
    echo 111;
    ob_clean();
    echo 222;

 

ob_start()开启ob缓存,然后111放进了ob缓存, 再调用ob_clean()清除缓存,最后输出的结果是222。

原理:页面执行到最后, 会把ob缓存的数据(如果有的话)强制刷新到程序缓存, 然后通过apache对数据封装成http响应包, 返回给浏览器。

注意:header头信息放程序缓存,如果没有ob缓存,则所有数据直接放程序缓存。

 

更多api参考 :  http://php.net/manual/zh/ref.outcontrol.php

 

 

 

<?php
for($i = 0; $i < 3; $i++){
    echo $i;
    sleep(1);
    flush();
}

 

flush 只是刷新到浏览器缓存,  然后程序结束时再一起输出。

我把浏览器缓存占满就能看到效果.

<?php
ob_end_clean(); //php.ini中设置了开启ob缓存, 所以关闭一下.
echo str_repeat('  ',1024);
for($i = 0; $i < 5; $i++){
    echo $i;
    sleep(1);
    flush();
}

 

 

 ob缓存中能存放哪些数据.

ob_start() 开始到 ob_get_contents()之间返回给浏览器的数据。

 

实现页面静态化可以使用正则替换, 也可以利用ob实现页面静态化。

<?php
    if(file_exists('index.html') && filemtime('index.html') + 60 >= time()){
        echo file_get_contents('index.html');
        exit;
    }
    ob_start();
?>

   //这里写原来的代码

<?php
    $html_str = ob_get_contents();
    file_put_contents('index.html', $html_str);
?>

 

如果内容修改, 我们看不到最新内容, 这是我们可以简单优化, 每过60秒刷新一次。

 

posted on 2017-05-31 11:17  谭兄  阅读(673)  评论(0编辑  收藏  举报