search for in the  
<ob_cleanob_end_flush>
Last updated: Thu, 19 May 2005

ob_end_clean

(PHP 4, PHP 5)

ob_end_clean --  Clean (erase) the output buffer and turn off output buffering

Description

bool ob_end_clean ( void )

This function discards the contents of the topmost output buffer and turns off this output buffering. If you want to further process the buffer's contents you have to call ob_get_contents() before ob_end_clean() as the buffer contents are discarded when ob_end_flush() is called. The function returns TRUE when it successfully discarded one buffer and FALSE otherwise. Reasons for failure are first that you called the function without an active buffer or that for some reason a buffer could not be deleted (possible for special buffer).

The following example shows an easy way to get rid of all output buffers:

Example 1. ob_end_clean() example

<?php
while (@ob_end_clean());
?>

Note: If the function fails it generates an E_NOTICE.

The boolean return value was added in PHP 4.2.0.

See also ob_start(), ob_get_contents(), and ob_flush().



User Contributed Notes
ob_end_clean
mrfritz379
08-Feb-2005 08:14
This may be posted elsewhere, but I haven't seen it.
To run a progress indicator while the program is running without outputting the output buffer, the following will work:

echo "<p>Search running. Please be patient. . .";
$output = "<p>FileList: </p>\n";
if (is_dir($dir)) {
   $dh = opendir($dir);

   while (($fd = readdir($dh)) != false) {
     echo " .";
     ob_start();
     echo $fd;
     $output .= ob_get_contents();
     ob_end_clean();
   }
}
echo "</br>Search Complete!</p>\n";
echo $output;

The program will continue to print the " ." without printing the file list. Then the "Search Complete" message will print followed by the buffered file list.
John Smith
04-Jun-2004 06:39
Note that if you started called ob_start with a callback, that callback will still be called even if you discard the OB with ob_end_clean.

Because there is no way of removing the callback from the OB once you've set it, the only way to stop the callback function from having any effect is to do something like:

<?php
$ignore_callback
= false;
ob_start('my_callback');
...
if(
$need_to_abort) {
  
$ignore_callback = true;
  
ob_end_clean();
   ...
}

function
my_callback(&$buffer) {
  if(
$GLOBALS['ignore_callback']) {
     return
"";
  }
  ...
}
?>
daijoubuNOSP at Mvideotron dot com
22-Feb-2004 03:11
About the previous comment:
You can also relay on ETag and simply use time()

<?php
$time
= time();
$mins = 1;
if (isset(
$_SERVER['HTTP_IF_NONE_MATCH']) and str_replace('"', '', $_SERVER['HTTP_IF_NONE_MATCH'])+($mins*60) > $time)
{
  
header('HTTP/1.1 304 Not Modified');
   exit();
}
else
{
  
header('ETag: "'.$time.'"');
}
echo
'Caching for ', $mins*60, 'secs<br/>', date('G:i:s');
?>
programmer at bardware dot de
27-Jun-2003 08:32
You might want to prevent your script from executing if the client already has the latest version.
You can do it like so:

ob_start();

$mtime=filemtime($_SERVER["SCRIPT_FILENAME"])-date("Z");
$gmt_mtime = date('D, d M Y H:i:s', $mtime) . ' GMT';

$headers = getallheaders();

if(isset($headers["If-Modified-Since"])) {
   if ($headers["If-Modified-Since"] == $gmt_mtime) {
       header("HTTP/1.1 304 Not Modified");
       ob_end_clean();
       exit;
   }
}

$size=ob_get_length();
header("Last-Modified: ".$gmt_mtime);
header("Content-Length: $size");
ob_end_flush();

Instead of checking the If-Modified-Since-Header against the date of the last modification of the script, you can of course query a database or take any other date that is somehow related to the modification of the result of your script.

You can for instance use this technique to generate images dynamically. If the user indicates he already has a version of the image by the If-Modified-Since-Header, there's no need to generate it and let the server finally discard it because the server only then interpretes the If-Modified-Since-Header.
This saves server load and shortens response-times.

<ob_cleanob_end_flush>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT