11.5. Flushing Stacked BuffersWhen you have no output buffers open, any text you print out goes straight to your user. When you have an output buffer, that text is stored away until you choose to flush it. When you have stacked output buffers, your buffers flush data up one level as opposed to going directly to output. For example: ob_start( ); print "In first buffer\n"; ob_start( ); print "In second buffer\n"; ob_end_flush( ); print "In first buffer\n"; ob_end_flush( ); That will output the following: In first buffer In second buffer In first buffer As you can see, the second buffer gets flushed into the first buffer where it was left off, as opposed to directly to outputit literally gets copied into the parent buffer. Take a look at the following script: ob_start( ); print "In first buffer\n"; ob_start( ); print "In second buffer\n"; ob_end_flush( ); print "In first buffer\n"; ob_end_clean( ); It is the same as the previous script, with the only difference being the last line ob_end_clean( ) is used rather than ob_end_flush( ). That script outputs nothing at all, because the second buffer gets flushed into the first buffer and then the first buffer gets cleaned, which means the clients receives none of the text. As long as you keep in mind that output buffers are stacked, not parallel, this functionality will work in your favoryou can progressively build up your content by opening up new buffers and flushing in content to a parent buffer as you go. |