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

时间: 2024-10-09 17:07:18

php 中的 Output Control 函数的相关文章

PHP输出缓冲控制- Output Control 函数应用详解

说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统 是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘.对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示. 其实对于PHP程序员来说,基本上每个脚本都涉及到了输出缓冲,只是在大多数情况下,我们都不需要对

PHP中output control

Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况.输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用.我们先举一个简单的例子,让大家对Output Control有一个大致的印象:Example 1. 程序代码 程序代码<?phpob_start(); //打开缓冲区echo \"Hellon\&q

PHP输出缓冲控制 - Output Control 函 应用详解

简介 说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘.对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示. 其实对于PHP程序员来说,基本上每个脚本都涉及到了输出缓冲,只是在大多数情况下,我们都不需

PHP缓存机制Output Control详解

这篇文章主要介绍了PHP缓存机制Output Control,需要的朋友可以参考下 在php5.2版本的配置中,默认output_buffering为关闭状态,因此运行下面三行代码将会出现一个警告: Warning: Cannot modify header information - headers already sent echo 'hello1'; header('content-type:text/html;charset=utf-8'); echo 'hello2'; 开启OB缓存的

PHP缓存机制之Output Control

--------------------------------------------------------------------------------------------------------- php5.2版本的配置中,默认output_buffering为关闭状态,运行下面三行代码将会出现一个警告:Warning: Cannot modify header information - headers already sent echo 'hello1'; header('co

零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构(转)

在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVFormatContext  AVFormatContext是一个贯穿始终的数据结构,很多函数都要用到它作为参数.FFmpeg代码中对这个数据结构的注释是:format I/O context 此结构包含了一个视频流的格式内容.其中存有了AVInputFormat(or AVOutputFormat同一时间AVFormatContext内只能存在其中一个),和AVStream.AVPack

[原]零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构

在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVFormatContext  AVFormatContext是一个贯穿始终的数据结构,很多函数都要用到它作为参数.FFmpeg代码中对这个数据结构的注释是:format I/O context 此结构包含了一个视频流的格式内容.其中存有了AVInputFormat(or AVOutputFormat同一时间AVFormatContext内只能存在其中一个),和AVStream.AVPack

C语言中可变参数的函数(三个点,“...”)

C语言中可变参数的函数(三个点,"...") 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解. 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表 void foo(...); void foo(parm_list,...); 这种方式和我们以前认识的不大

numpy函数库中一些经常使用函数的记录

##numpy函数库中一些经常使用函数的记录 近期才開始接触python,python中为我们提供了大量的库,不太熟悉.因此在<机器学习实战>的学习中,对遇到的一些函数的使用方法进行记录. (1)mat( ) numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都能够用于处理行列表示的数字元素. 尽管他们看起来非常类似,可是在这两个数据类型上运行同样的数学运算能够得到不同的结果,当中numpy函数库中matrix与MATLAB中matrices等价. 调用mat( )