i have reviewed php manual about the ob_start() ob_end_clean() ob_end_flush(). And i have seen a different example about the subject, anyway i modified the example but i'm confused at this point. here is the script.
ob_start();
echo "Hello x, ";
ob_start();
echo "Hello y, ";
ob_start();
echo "Hello z, ";
ob_start();
echo "Hello World";
$ob_2 = ob_get_contents();
ob_end_clean();
echo "Galaxy";
$ob_1 = ob_get_contents();
ob_end_clean();
echo " this is OB_1 : ".$ob_1;
echo "<br> and this is OB_2 : ".$ob_2;
And output of this script is:
Hello x, Hello y, this is OB_1 : Hello z, Galaxy
and this is OB_2 : Hello World
--------------------------------------------
Why the output isn't like that?
this is OB_1 : Hello x, Hello y, Hello z, Galaxy
and this is OB_2 : Hello World
And what is the point i have missed?
Output buffers work like a stack. You create one buffer and echo "Hello x, " into it, then you create another buffer and echo "Hello y " into it, then you create a third buffer and echo "Hello z, " into it. The "Hello World" goes into a fourth buffer, which is closed by the call to ob_end_clean()
, so you're back to the third one. When you call ob_get_contents()
after echoing "Galaxy", you're getting the contents of that third buffer.
If you call ob_get_contents()
again at the end of this code, you'll get the "Hello y, " that's in the second buffer. And if you ob_end_close()
that and then ob_get_contents()
again, you'll get the "Hello x, " from the first buffer.