php output_buffering 缓存使用

buffer是一个内存地址空间,linux系统默认大小一般为4096(4kb)。主要用于存储速度不同步的设备或优先级不同的设备之间传递数据的区域。

通过buffer可以使进程之间的相互等待变少。

例如,当你打开一个文本编辑器,输入一个字符时,系统并不会立即写入磁盘。而是存储在buffer中,当写满一个buffer时,才会把buffer的内容写入磁盘。

当然也可以使用flush强制将buffer的数据写入磁盘。

在php中,例如 echo,print,输出并不会立即通过tcp传递给浏览器输出。而是将数据写入php buffer。当一个php buffer写满,才会通过tcp传递给浏览器。

echo /print -> php output_buffer -> tcp buffer -> browser

php output_buffering

默认情况下,php buffer是开启的,默认值是4096(4kb)。可以在php.ini中找到output_buffering 配置。知道buffer写满,才会发送到浏览器。

也可以设置ob_start(),这样即使超过默认值(4kb)也不会立即发送到浏览器,只到脚本运行完成,或者调用了ob_end_flush方法,才会输出到浏览器。

1.output_buffering=4096,输出较少的数据(少于一个buffer)

<?php
for($i=0; $i<10; $i++){
    echo $i.'<br>';
    sleep(2);
}
?>

运行结果:等所有脚本全部运行完成后,才输出,因为数据未满一个buffer的大小。

2.output_buffering=4096,输出较少的数据(少于一个buffer),关闭output_buffering,修改php.ini的output_buffering=0

<?php
for($i=0; $i<10; $i++){
    echo $i.str_repeat("&nbsp;",500).'<br>'; // 当接受到的256(甚至更多)个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
    flush();
    sleep(1);
}
?>

运行结果:因为禁用了php buffering,不需要等到脚本运行完毕就可以输出,数据没有在php buffer停留,可以看到断断续续间歇性输出。echo -> tcp buffer ->browser

3.当output_buffering=4096,输出较大数据(大于一个buffer),不使用ob_start()

<?php
for($i=0; $i<10; $i++){
    echo file_get_contents('f.txt').$i.'<br>';
    sleep(1);
}
?>

运行结果:f.txt为一个大于4kb的文件,因为大于buffer默认值,buffer空间不够用,每当满一个buffer就会输出,所以可以看到间歇性输出。

4.当output_buffering=4096,输出较大数据(大于一个buffer),使用ob_start()

<?php
ob_start();
for($i=0; $i<10; $i++){
    echo file_get_contents('f.txt').$i.'<br>';
    sleep(1);
}
?>

运行结果:因为使用了ob_start(),会为buffer设置足够大的空间,因此会保存到脚本执行完毕后才会输出。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 运行
, buffer
, 输出
, #buffer
, 一个
, buffered
, php中ob(Output
output_buffering
php output buffering、output buffering、outputbuffering 4096、buffering 迅雷 缓存、php redis缓存使用,以便于您获取更多的相关知识。

时间: 2024-11-03 06:46:45

php output_buffering 缓存使用的相关文章

基于PHP输出缓存(output_buffering)的深入理解_php技巧

首先明确一下PHP的输出顺序1.打开了php输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display2.未打开php输出缓存: echo,print -> server buffering -> browser buffering -> browser display 另外明确一下浏览器的输出缓存:IE为256Bytes,

php 缓存机制:输出控制

1. 运行时配置(php.ini)      output_buffering = Off      display_errors = On  2. 函数说明  (1)bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )      此函数将打开输出缓冲.当输出缓冲是活跃的时候,没有输出能从脚本送出(除http标头外),相反输出的内容被存储在内部缓冲区中.内部缓冲区的内容可以用 ob_g

PHP输出缓存ob系列函数详解

 ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担 ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器. 下面我说说ob的基本作用:   1)防止在浏览器有输出之后再使用setcookie().header()或session_start()

PHP缓存机制Output Control详解_php技巧

在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缓存的方式有如下两种: 1. php.ini中开启 output_buffering =

php ob_flush flush 输出缓存实例与说明

php教程 ob_flush flush 输出缓存实例与说明 */ ob_flush(); // flush(); // function flush (){     echo(str_repeat(' ',256));     // check that buffer is actually set before flushing     if (ob_get_length()){                    @ob_flush();         @flush();       

PHP输出缓存ob系列函数详解_php技巧

ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器.下面我说说ob的基本作用:  1)防止在浏览器有输出之后再使用setcookie().header()或session_start()等发送头文件的函数造成的错误.其实这样的用法少用为好,养成良好的代码习惯.  2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例

PHP中的output_buffering详细介绍_php技巧

我个人认为,Output buffering是比较纯粹的4.0特征.尽管从概念上看来相当简单,但是output buffering功能非常强大,能使开发者更容易地开发高级而有效的程序. 本文将介绍HTTP header,以及output buffering如何帮助您处理HTTP header,并介绍了output buffering的一些高级用法. HTTP Header 对 于使用HTTP 协议建立的每个请求,Web服务器产生的响应通常包括两个部分 – 标题和主体.例如,如果在Web服务器的文

php 页面输出缓存控制深入分析

在php所谓的输出缓冲,就是代码中的echo 或者其他输出命令在执行的时候是先写入到 php buffer,在脚本执行完或者强制执行输出缓存的命令后,才会把数据输出到浏览器(其中php buffer 就是php.ini中设置的output_buffering ,默认是on,表明无限制大小,可以换成数字来限制大小). 例子: echo 'www.111cn.net'; echo '技术'; echo '分享'; 这两个echo 是按顺序插入到缓冲区的,只有脚本执行完成或者强制执行缓存输出才会把数据

PHP使用缓存即时输出内容(output buffering)的方法_php技巧

PHP使用缓存即时输出内容(output buffering)的方法.分享给大家供大家参考.具体如下: $buffer = ini_get('output_buffering'); echo str_repeat(' ',$buffer+1); //防止浏览器缓存 ob_end_flush(); //关闭缓存 for( $i=1; $i<=10; $i++ ){ echo '第 '.$i.' 次输出.'."<br />\n"; flush(); //刷新缓存(直接发送