Приглашаем посетить
Есенин (sergeiesenin.lit-info.ru)

Section 11.5.  Flushing Stacked Buffers

Previous
Table of Contents
Next

11.5. Flushing Stacked Buffers

When 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.


Previous
Table of Contents
Next