zoukankan      html  css  js  c++  java
  • php 中的 Output Control 函数

    先看一个简单的例子

    <?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秒刷新一次。

  • 相关阅读:
    RocketMq总结(六) -- 顺序消息
    RocketMq总结(五) -- 消息队列负载均衡和再分配
    RocketMq总结(三) -- 消费者启动 MQClientInstance
    归并排序
    CMS垃圾收集器总结
    桶排序
    快速排序
    ThreadLocal的妙用
    NC_41 找最小的k个数
    RocketMq一条消息存储结构
  • 原文地址:https://www.cnblogs.com/tanxing/p/6923243.html
Copyright © 2011-2022 走看看