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

  • 相关阅读:
    VUE项目爬坑---3、vue route的编程式导航
    js的getBoundingClientRect的用法
    iphone真机开发流程之--证书申请
    提交App到Apple Store(Xcode4)
    iPhone应用提交流程:如何将App程序发布到App Store?
    反编译Apk得到Java源代码
    jquery mobile 自定义图标
    Phonegap通过JS访问本地接口的两种方法
    jQuery插件开发
    Android_HTML解析器_jsoup
  • 原文地址:https://www.cnblogs.com/tanxing/p/6923243.html
Copyright © 2020-2023  润新知