Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

strange ob_start() behaviour - double output

ob_start() doesn't seem to be stopping any output so when I flush the buffer it's doubling up

<?php
ob_start();
echo "Text..... <br />";
echo ob_get_flush();
?>

Outputs

Text..... 
Text..... 

But I was expecting

Text..... 

Any ideas ?

Thanks

like image 848
JimmyJ Avatar asked Jul 14 '10 15:07

JimmyJ


2 Answers

Remove the echo on the last line.

ob_get_flush() implicitly prints the stored output and also returns it so you're printing it out twice.

You may have confused ob_get_flush() with ob_get_clean()

like image 157
Mike B Avatar answered Oct 13 '22 00:10

Mike B


try:

<?php
ob_start();
echo "Text..... <br />";
ob_get_flush();
?>

from http://php.net/manual/en/function.ob-get-flush.php

Flush the output buffer, return it as a string and turn off output buffering

Flush the output means: it sends the output to the browser or the commandline. return the string means: it returns the string, so you can store the flushed string in a variable. And since you're echoing this string you get the output a second time.

like image 38
jigfox Avatar answered Oct 13 '22 01:10

jigfox