php 中的 Output Control 函数

Posted 谭兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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秒刷新一次。

 

以上是关于php 中的 Output Control 函数的主要内容,如果未能解决你的问题,请参考以下文章

angularjs 和 PHP:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin

React.js + PHP/Apache:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型

PHP中的6种加密方式

PHP中的6种加密方式

如何遍历一个文件夹下的所有文件,并用md5函数算出所有文件的md5值?(用php实现)

深入理解php的输出缓冲区(output buffer)