麻烦各位能帮我看下这个执行的流程吗?请详细说明咯,我不是很清楚,谢谢了
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 

解决方案 »

  1.   


    <?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; ?> 
      

  2.   


    使用ob_start()把内容输出到缓冲区,而不是到浏览器。
    使用ob_get_contents得到缓冲区的数据。
      

  3.   

    想请问下:
    ob_start(); 
    echo ' multiple '; 
    ob_start(); 
    echo ' buffers work '; 此时,缓冲区里面的数据是什么呢?是multiple和buffers work都存在吗
      

  4.   

    此时缓冲区里面的数据是buffers work 
      

  5.   


    ob分层的,你的code里用了2层
    此时, multiple在1层,buffers work在2层可以ob_get_level获得当前的ob层
      

  6.   

    麻烦请问,是覆盖了吗?
    那为什么最后echo $buf1,还能有结果呢?
    谢谢您了麻烦
      

  7.   


    麻烦请问下第一个ob_end_clean(); 就是只清除了一层的数据,而不是全部的数据吗?
      

  8.   

    函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
    这样的话, 能将在执行ob_end_clean()前把内容保存到一个"变量"中,然后在ob_end_clean()后面对这个变量做操作
      

  9.   

    您的意思我明白,就是流程方面不太清楚,也就是说ob_get_contents()怎么只取得multiple和buffers work其中的一个呢
      

  10.   

    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;黑色的部分是第一层缓冲
    红色的部分是第二层缓冲缓冲的组织有如堆栈,层次高的在上面