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

  • 相关阅读:
    javascript 实现 TreeView全选(实现子节点全选,中父节点自动全选)
    关于健康档案的基本架构与数据标准
    SQLite内建语法表
    狼群中的男人(A Man Among Wolves)
    教你瞬间赢得别人信任的 “冷读术”
    SymbianOS精要
    为幼龄儿童设计 iPad 软件介面的四条心得
    OpenGL ES
    如何变得更加优秀
    创业的八大能力
  • 原文地址:https://www.cnblogs.com/tanxing/p/6923243.html
Copyright © 2011-2022 走看看