为什么ob_get_contents不起作用

时间:2014-04-19 01:17:20

标签: php output-buffering

我有这段代码:

<?php
ob_start();
?>
hi
<?php echo ob_get_contents(); ob_end_clean();

但没有输出任何内容 如果我删除ob_end_clean();,则输出为hi hi。如果在应用程序结束时未调用ob_flush(),则会再次自动刷新内容。

我需要使用ob_get_contents(),因为我将实现一个简单的缓存机制,将输出保存到文件中。

请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:6)

更新:我很惊讶,但您的示例实际上与输出缓冲有关。我不认为php标签之间的HTML会起作用,但确实如此。

<?php
ob_start();
?>
Hello World
<?php 
echo "Goodbye";
$test = ob_get_contents(); ob_end_clean(); echo "output:".$test;
?>

这会输出output: Hello World Goodbye

问题是你正在将ob_get_contents回显到缓冲区中。正如你在评论中提出的关于模板的问题一样,我仍然认为你的输出缓冲是错误的。您应该将PHP变量推送到HTML模板,而不是将HTML模板拉入PHP脚本。您还应该查看控制器/视图解决方案,但下面是一个基本示例。

模板:对于模板,一个基本的例子可能是:

<?php
ob_start();
...PHP LOGIC HERE...
...PHP LOGIC HERE...
...PHP LOGIC HERE...
$content = ob_get_contents();
ob_end_clean();
?>
<html>
<body>
<div><?php echo $content; ?></div>
</body></html>