麻烦各位能帮我看下这个执行的流程吗?我不是很清楚,谢谢

chenhaohh 2010-02-02 10:36:11
麻烦各位能帮我看下这个执行的流程吗?请详细说明咯,我不是很清楚,谢谢了
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
...全文
128 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhaohh 2010-02-02
  • 打赏
  • 举报
回复
好的,谢谢大家了
xuzuning 2010-02-02
  • 打赏
  • 举报
回复
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;

黑色的部分是第一层缓冲
红色的部分是第二层缓冲

缓冲的组织有如堆栈,层次高的在上面



chenhaohh 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 iwantnet 的回复:]
函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
这样的话, 能将在执行ob_end_clean()前把内容保存到一个"变量"中,然后在ob_end_clean()后面对这个变量做操作
[/Quote]
您的意思我明白,就是流程方面不太清楚,也就是说ob_get_contents()怎么只取得multiple和buffers work其中的一个呢
iwantnet 2010-02-02
  • 打赏
  • 举报
回复
函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
这样的话, 能将在执行ob_end_clean()前把内容保存到一个"变量"中,然后在ob_end_clean()后面对这个变量做操作
chenhaohh 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 helloyou0 的回复:]
引用 3 楼 chenhaohh 的回复:
想请问下:
ob_start();
echo ' multiple ';
ob_start();
echo ' buffers work '; 此时,缓冲区里面的数据是什么呢?是multiple和buffers work都存在吗



ob分层的,你的code里用了2层
此时, multiple在1层,buffers work在2层

可以ob_get_level获得当前的ob层
[/Quote]

麻烦请问下第一个ob_end_clean(); 就是只清除了一层的数据,而不是全部的数据吗?
chenhaohh 2010-02-02
  • 打赏
  • 举报
回复
麻烦请问,是覆盖了吗?
那为什么最后echo $buf1,还能有结果呢?
谢谢您了麻烦
helloyou0 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenhaohh 的回复:]
想请问下:
ob_start();
echo ' multiple ';
ob_start();
echo ' buffers work '; 此时,缓冲区里面的数据是什么呢?是multiple和buffers work都存在吗

[/Quote]

ob分层的,你的code里用了2层
此时, multiple在1层,buffers work在2层

可以ob_get_level获得当前的ob层
iwantnet 2010-02-02
  • 打赏
  • 举报
回复
此时缓冲区里面的数据是buffers work
chenhaohh 2010-02-02
  • 打赏
  • 举报
回复
想请问下:
ob_start();
echo ' multiple ';
ob_start();
echo ' buffers work '; 此时,缓冲区里面的数据是什么呢?是multiple和buffers work都存在吗
iwantnet 2010-02-02
  • 打赏
  • 举报
回复

使用ob_start()把内容输出到缓冲区,而不是到浏览器。
使用ob_get_contents得到缓冲区的数据。
iwantnet 2010-02-02
  • 打赏
  • 举报
回复

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

?>

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧