There are two ways to start buffering output: through a setting in php.ini to enable output buffering for all scripts, or by using a function call on a script-by-script basis. Surprisingly, the latter is preferred - it makes your code more portable, and also gives you greater flexibility.
To create a new output buffer and start writing to it, call ob_start(). There are two ways to end a buffer, which are ob_end_flush() and ob_end_clean() - the former ends the buffer and sends all data to output, and the latter ends the buffer without sending it to output. Every piece of text outputted while an output buffer is open is placed into that buffer as opposed to being sent to output. Consider the following script:
That script will output "Hello First" because the first text is placed into a buffer then flushed with ob_end_flush(). The "Hello Second" will not be printed out, though, because it is placed into a buffer which is cleaned using ob_end_clean() and not sent to output. Finally, the script will print out "Hello Third" because PHP automatically flushes open output buffers when it reaches the end of a script.