麻烦各位能帮我看下这个执行的流程吗?请详细说明咯,我不是很清楚,谢谢了
ob_start();
echo ' multiple ';
ob_start(); echo ' buffers work ';
$buf2 = ob_get_contents();
ob_end_clean();
$buf1 = ob_get_contents();
ob_end_clean(); echo $buf1;
echo '<br/>';
echo $buf2; 结果:
multiple
buffers work
ob_start();
echo ' multiple ';
ob_start(); echo ' buffers work ';
$buf2 = ob_get_contents();
ob_end_clean();
$buf1 = ob_get_contents();
ob_end_clean(); echo $buf1;
echo '<br/>';
echo $buf2; 结果:
multiple
buffers work
<?php
ob_start(); //使用ob_start()把输出那同输出到缓冲区
echo ' multiple ';
ob_start(); //使用ob_start()把输出那同输出到缓冲区
echo ' buffers work ';
$buf2 = ob_get_contents(); //然后用ob_get_contents得到缓冲区的数据。
ob_end_clean(); //函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
$buf1 = ob_get_contents(); //然后用ob_get_contents得到缓冲区的数据。
ob_end_clean(); //函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。echo $buf1;
echo ' <br/>';
echo $buf2; ?>
使用ob_start()把内容输出到缓冲区,而不是到浏览器。
使用ob_get_contents得到缓冲区的数据。
ob_start();
echo ' multiple ';
ob_start();
echo ' buffers work '; 此时,缓冲区里面的数据是什么呢?是multiple和buffers work都存在吗
ob分层的,你的code里用了2层
此时, multiple在1层,buffers work在2层可以ob_get_level获得当前的ob层
那为什么最后echo $buf1,还能有结果呢?
谢谢您了麻烦
麻烦请问下第一个ob_end_clean(); 就是只清除了一层的数据,而不是全部的数据吗?
这样的话, 能将在执行ob_end_clean()前把内容保存到一个"变量"中,然后在ob_end_clean()后面对这个变量做操作
echo ' multiple ';
ob_start();
echo ' buffers work ';
$buf2 = ob_get_contents();
ob_end_clean();
$buf1 = ob_get_contents();
ob_end_clean(); echo $buf1;
echo ' <br/>';
echo $buf2;黑色的部分是第一层缓冲
红色的部分是第二层缓冲缓冲的组织有如堆栈,层次高的在上面