本文的示例总结了PHP缓冲区的用法:
让我们先看一段代码。
< PHP
(0美元= 10美元;
{
回声$ i;
同花顺();
睡眠(1);
}
>
根据PHP手册,
此
函数将当前
程序的所有输出发送到
用户的
浏览器。
上面的代码应该每隔二美元出口,但是事实上,这是不一定的
情况下,可以
等待10秒后,所有的输出是在相同的时间。
好,让我们改变这个代码并把它改为
< PHP
(ob_end_clean); / /
修改部分
(0美元= 10美元;
{
回声$ i;
同花顺();
睡眠(1);
}
>
嘿,这个ob_end_clean();它是好的。事实上,我们改变ob_end_clean()()()为ob_end_flush以及好。
我再换一次。
< PHP
(0美元= 10美元;
{
回声$ i;
(ob_flush); / /修改部分
同花顺();
睡眠(1);
}
>
运行,你
发现我也输出一秒一次吗为什么会这样
别担心,让我们来看看在php.ini。
对于output_buffering打开php.ini
文件,
搜索,我们会看到这样的
设置output_buffering = 4096。正如其名,output_buffering,此设置的
功能是缓冲输出,和缓冲区的大小是4096bytes。
在我们的第一个代码,没有预期的输出,因为output_buffering有缓冲的输出。输出将不会发出无4096bytes或剧本的结束。
ob_end_clean的
作用()()和()ob_end_flush第二段代码终止缓冲。这不会要等到4096bytes缓冲发送出去。
在第三段,一ob_flush()使用。它的功能是发送缓冲数据,但它不会终止缓冲区,因此必须在每次刷新()之前使用它。
如果你不想使用ob_end_clean()(),()和ob_end_flush ob_flush(),我们必须在php.ini设置output_buffering足够小,例如,设置为0。
值得注意的是,如果你打算在
脚本中使用ini_set(output_buffering 因为在这脚本,开始缓冲设置加载和缓冲区的开始。
也许你会问,既然ob_flush()是发送缓冲区的数据,你需要使用下面的代码直接冲洗()
< PHP
(0美元= 10美元;
{
回声$ i;
ob_flush();
睡眠(1);
}
>
请注意ob_flush之间的差异()和冲洗()。前者是从PHP缓存数据的发布,将不在缓冲区的数据或发布到浏览器。所以当缓冲区的存在,我们必须使用ob_flush()和()在同一时间冲洗。
这是不可缺少的吗不,我们有一个办法让它立即发送到浏览器时,有一个数据输出。以下两段代码不需要使用同花顺()。(当你设定output_buffering 0,甚至ob_flush ob_end_clean()和()不需要)
< PHP
ob_implicit_flush(真的);
(0美元= 10美元;
{
回声$ i;
(ob_flush)#;如果打开箱子的OB功能
睡眠(1);
}
>
< PHP
ob_end_clean();
ob_implicit_flush(真的);
(0美元= 10美元;
{
回声$ i;
睡眠(1);
}
>
看ob_implicit_flush(真正的)以上,使输出被发送到浏览器,每当有输出。这并不需要被发送到与刷新浏览器()之后的每一个输出(回声)。
上述投诉可能无法在某些浏览器,因为浏览器有自己的规则。我用firefox1.5,IE6,opera8.5来测试,其中歌剧不能正常输出因为它有一个规则,它是绝对不会输出除非一个HTML标签时除非脚本完成,Firefox和IE。更多的是正常的。
最后,一个非常有趣的一段代码是附属于作者puttyshell。脚本中的周期,每个输出将覆盖以前的输出。
下面的代码仅在Firefox,和其他的浏览器不
支持多部分/ x-mixed-replace的内容
类型。
< PHP
头('content-type:多部分/ x-mixed-replace;边界= endofsection);
打印——endofsection ;
元=数组()
($ i = 0;$ i < 10;$ + +){
睡眠(1);
打印内容类型:
文本;
打印部分美元,$ 4;
打印-- endofsection ;
ob_flush();
同花顺();
}
打印内容类型:文本;
打印结束;
打印-- endofsection -- ;
>
更多对PHP相关内容感兴趣的读者可以看到本
网站的主题:PHP基本语法
教程 希望本文能对PHP程序设计有所帮助。