在php.ini 中的output_buffering,用来配置php输出缓冲,有一下三类值:
ON: 脚本自动调用ob_start(), 打开输出缓冲区.
OFF: 默认值。关闭缓冲。需要时,可带代码中显式调用ob_start(),来打开php缓存
整数值:脚本自动调用ob_start(), 打开输出缓冲区.并设置缓存的大小为该整数。单位为byte;
严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.
在apache module的sapi下, flush会通过调用sapi_module的flush成员函数指针, 间接的调用apache的api: ap_rflush刷新apache的输出缓冲区, 当然手册中也说了, 有一些apache的其他模块, 可能会改变这个动作的结果.有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。
output_buffering = Off;
ob_start(); //手动开启缓存区 $level = ob_get_level(); //取得缓存区的级别,此值为1 echo "cache level:{$level}"; for($i=0;$i<5;$i++){ echo $i." Line<br>"; ob_flush(); flush(); $j= 0; while($j<1000000){ $j++; } } ob_end_flush(); //结束缓存区
output_buffering = Off;
<pre name="code" class="php">ob_start(); //手动开启缓存区 $level = ob_get_level(); //取得缓存区的级别,此值为1 ob_start(); //又一次手动开启缓存区,此去嵌套在 缓存区1内 $level = ob_get_level(); //取得缓存区的级别,此值为2 echo "cache level:{$level}"; for($i=0;$i<5;$i++){ echo $i." Line<br>"; ob_flush(); flush(); $j= 0; while($j<1000000){ $j++; } } ob_end_flush(); //结束 缓存区2 ob_end_flush(); //结束 缓存区1