note 113406 added to function.ob-get-clean
| From: | paul+phpnet at earth2me dot com | Date: | Tue, 08 Oct 2013 00:09:05 +0000 |
| Subject: | note 113406 added to function.ob-get-clean | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-196488@lists.php.net to get a copy of this message | ||
Keep in mind that output may be buffered by default, depending on how you are running PHP (CGI, CLI,
etc.). You can use ob_get_level() to determine if an output buffer has already been started. On
most web servers I've used, output buffering is already one level deep before my scripts start
running.
You should only end as many output buffers as you start. Assuming that your buffer is always the
first buffer, or otherwise closing pre-existing buffers, could lead to problems. In PHP 5.5, you
can ensure that output buffers are ended properly using a try-finally block.
Something like this is almost guaranteed to break stuff:
<?php
// Don't ever do this!
while (ob_get_level() > 1)
{
ob_end_flush();
}
$content = ob_get_clean();
?>
The problem is that number, "1". Using a fixed number there is asking for trouble.
Instead, use ob_get_level() to get the number of output buffers applied when your code starts, and
return to that number, if you really must use an unknown number of output buffers:
<?php
ob_start();
$saved_ob_level = ob_get_level();
// Do stuff here:
run_something();
// If you really must close all of your output buffers except one, this'll do it:
while (ob_get_level() > $start_ob_level)
{
ob_end_flush();
}
// And now, the final output buffer that belongs to us:
$content = ob_get_clean();
?>
----
Server IP: 69.147.83.199
Probable Submitter: 70.215.10.48
----
Manual Page -- http://php.net/manual/en/function.ob-get-clean.php
Edit -- https://master.php.net/note/edit/113406
Del: integrated -- https://master.php.net/note/delete/113406/integrated
Del: useless -- https://master.php.net/note/delete/113406/useless
Del: bad code -- https://master.php.net/note/delete/113406/bad+code
Del: spam -- https://master.php.net/note/delete/113406/spam
Del: non-english -- https://master.php.net/note/delete/113406/non-english
Del: in docs -- https://master.php.net/note/delete/113406/in+docs
Del: other reasons-- https://master.php.net/note/delete/113406
Reject -- https://master.php.net/note/reject/113406
Search -- https://master.php.net/manage/user-notes.php