PHP Web Fundamentals
Buffering Output to the Browser
Problem
You want to start generating output before you’re finished sending headers or cookies.Solution
Call 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();
Discussion
You 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. For example:<?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.
No comments:
Post a Comment