突然看视频的时候看到了ob_start()的用法,虽然有解释但自己还是一知半解,理解能力太差了
然后今天找资料必须将这个知识点攻克。
ob_start()是开启缓冲区 何谓缓冲区 在内存中的一块区域,大小php.ini可以设置这块区域的大小,然后将想输出的内容放入这块区域内。
ob_get_contents() :获取缓冲区中的内容。可以赋值给一个变量。
敲黑板了 重点代码: 输出缓冲区 这是一个名词:
- ob_clean — 清空(擦掉)输出缓冲区
- ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲
- ob_end_flush — 冲刷出(送出)输出缓冲区内容并关闭缓冲
- ob_flush — 冲刷出(送出)输出缓冲区中的内容
ob_get_length 得到缓冲区数据的长度
下面是例子:
//开启缓冲区
ob_start();
echo "这是第一次输出内容!\n";
$ff[1] = ob_get_contents() ; //获取当前缓冲区内容
ob_flush();//缓冲器清除
echo "这是第二次输出内容!\n";
$ff[2] = ob_get_contents() ; //获取当前缓冲区内容
echo "这是第三次输出内容!\n";
$ff[3] = ob_get_contents() ; //获取当前缓冲区内容
ob_end_flush();
echo "<pre>";
print_r($ff);
输出的内容:
这是第二次输出内容! 这是第三次输出内容!
Array
(
[1] =>
[2] => 这是第二次输出内容!
[3] => 这是第二次输出内容!
这是第三次输出内容!
)
备注:
举例2:层级缓冲区
ob_start();
echo 'level 1<br/> ';
ob_start();
echo 'level 2<br/> ';
ob_start();
echo 'level 3<br/> ';
ob_end_flush();
ob_end_flush();
ob_end_flush();
输出内容:
level 1
level 2
level 3
ob_start();
echo 'level 1<br/> ';
ob_start();
echo 'level 2<br/> ';
ob_start();
echo 'level 3<br/> ';
ob_end_clean();//修改处
ob_end_flush();
ob_end_flush();
输出内容:
level1
level2
ob_end_clean() 关闭的是最近的输出缓冲区 其实这是一种错误的观点 看下一个
ob_start();
echo 'level 1<br/> ';
ob_start();
echo 'level 2<br/> ';
ob_start();
echo 'level 3<br/> ';
ob_end_clean(); //第一次修改
ob_end_flush();
ob_end_clean(); //第二次修改
输出的是:
空
这次什么都没有输出出来
中间有个ob_end_flush 应该输出个level2吧
其实这个思路是错误的,正确的思路应该是:
缓冲区是分层级的:按照先后 分别为 ABC 则层级的关系是 C>B>A>F F是最重的缓冲区
那么流程来一遍
第一个ob_end_clean() 清除的是C
第二个ob_end_flush() 将B输出缓冲区的内容level2发送到A输出缓冲区 此时A的输出区的内容是 level1 level2 然后再ob_end_clean() 将A输出缓冲区清空 所以是最后输出是空。