8.13. Buffering Output to the Browser8.13.1. ProblemYou want to start generating output before you're finished sending headers or cookies. 8.13.2. SolutionCall ob_start( ) at the top of your page and ob_end_flush( ) at the bottom. You can then intermix commands that generate output and commands that send headers. The output won't be sent until ob_end_flush( ) is called: <?php ob_start(); ?> I haven't decided if I want to send a cookie yet. <?php setcookie('heron','great blue'); ?> Yes, sending that cookie was the right decision. <?php ob_end_flush(); ?> 8.13.3. DiscussionYou can pass ob_start( ) the name of a callback function to process the output buffer with that function. This is useful for postprocessing all the content in a page, such as hiding email addresses from address-harvesting robots: <?php function mangle_email($s) { return preg_replace('/([^@\s]+)@([-a-z0-9]+\.)+[a-z]{2,}/is', '<$1@...>', $s); } ob_start('mangle_email'); ?> I would not like spam sent to ronald@example.com! <?php ob_end_flush(); ?> The mangle_email( ) function transforms the output to: I would not like spam sent to <ronald@...>! The output_buffering configuration directive turns output buffering on for all pages: output_buffering = On Similarly, output_handler sets an output buffer processing callback to be used on all pages: output_handler=mangle_email Setting an output_handler automatically sets output_buffering to on. 8.13.4. See AlsoRecipe 10.11 uses output buffering in a database error logging function; documentation on ob_start( ) at http://www.php.net/ob-start, ob_end_flush( ) at http://www.php.net/ob-end-flush, and output buffering at http://www.php.net/outcontrol. Copyright © 2003 O'Reilly & Associates. All rights reserved. |
|