发新话题
打印

ob_start()函数问题(已解决)

ob_start()函数问题(已解决)

ob_start() 这个函数,看到定义是:
当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

手册上最后几行的例子:
复制内容到剪贴板
代码:
<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}

ob_start("callback");

?>



It's like comparing apples to oranges.



<?php

ob_end_flush();
?>
可是为啥我把ob_end_flush();这句注释掉,浏览器上一样有输出呢?

TOP

默认是输出的

TOP

ob_end_flush的是意思就是ob_end并且flush

TOP

引用:
原帖由 chris 于 2007-10-8 17:37 发表
ob_end_flush的是意思就是ob_end并且flush
不明白,我的问题关键是为啥没有on_end_flush(),浏览器一样会输出呢?ob_start()作用何在呢?

TOP

快来回答我这个问题啊,,,从昨天搞到今天还是没弄明白。

再举个例子:
<?php
ob_start(); //打开缓冲区
echo "Welcome /n"; //输出
header("location:next.php");
?>
大部分地方都是说如果没有ob_start(); 那么header之前有输出会报错,有了ob_start()就不会有输出,header就不会报错,可是为啥我把header去掉:
<?php
ob_start(); //打开缓冲区
echo "Welcome /n"; //输出
?>
浏览器一样会输出Welcome呢??难道说后面有header才不会输出?

TOP

今天在CU总算把这个搞明白了,原来脚本结束了就会自动释放缓存了,相当于自动有个ob_end_flush(),就好比mysql_close()一样在脚本结束时候会自动关闭mysql,不过为了养成好习惯,最好还是要写上。

TOP

最好是写上,怕就是PHP在以后的版本中修改机制,如果不写容易出现问题

TOP

发新话题