2020-09-15 关于php那些遗忘的不曾关心过的知识点 --- ob_start() 函数系列

突然看视频的时候看到了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输出缓冲区清空  所以是最后输出是空。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值