Question

I have this code:

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

But nothing is outputted.
If I remove the ob_end_clean(); the output is hi hi. If ob_flush() isn't called at the end of the app, the contents are automatically flushed, again.

I need to use ob_get_contents() because I am going to implement a simple caching mechanism that saves the the output to a file.

Please help.

Thanks!

Was it helpful?

Solution

Update: I am surprised but your example does actually work with output buffering. I did not think that HTML between php tags would work but it does.

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

This outputs output: Hello World Goodbye.

The problem is you are echoing ob_get_contents into the buffer. As your question in the comments was about templating, I still think you are going about output buffering wrong. You should push PHP variables into an HTML template, not pull an HTML template into a PHP script. You should also look into a controller/view solution but below is a basic example.

Templating: For templating, a basic example could be:

<?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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top