PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ob_end_flush> <ob_clean
Last updated: Fri, 04 Jul 2008

view this page in

ob_end_clean

(PHP 4, PHP 5)

ob_end_clean — Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung

Beschreibung

bool ob_end_clean ( void )

Der Inhalt des Ausgabepuffers (sofern vorhanden) wird verworfen und der Ausgabepuffer (aber nur dieser) wird deaktiviert. Falls sie mit dem Puffer-Inhalt weiter arbeiten möchten, müssen sie diesen erst per ob_get_contents() zwischen speichern bevor sie ob_end_clean() aufrufen, da dadurch der Puffer geleert wird.

Rückgabewerte

Die Funktion gibt TRUE zurück wenn ein Ausgabepuffer entfernt wurde, FALSE wenn kein aktiver Puffer vorhanden war oder der aktuelle Puffer nicht deaktiviert werden konnte (dies ist bei speziellen Puffern möglich).

Fehler/Exceptions

Im Fehlerfall generiert die Funktion eine E_NOTICE Meldung.

ChangeLog

Version Beschreibung
4.2.0 Der Boolean-Rückgabewert wurde hinzugefügt.

Beispiele

Das folgende Beispiel zeigt einen einfachen Weg um alle aktiven Ausgabepuffer zu entfernen:

Beispiel #1 ob_end_clean() Beispiel

<?php
ob_start
();
echo 
'Text der nicht ausgegeben wird.';
ob_end_clean();
?>



ob_end_flush> <ob_clean
Last updated: Fri, 04 Jul 2008
 
add a note add a note User Contributed Notes
ob_end_clean
geoff at spacevs dot com
22-Jul-2007 05:47
If you call ob_end_clean in a function registered with "register_shutdown_function", it is too late, any buffers will have already been sent out to the client.
everling
11-Nov-2006 02:04
Keep in mind that mrfritz379's example (#49800) is just an example. You can achieve that example's result in a more efficient manner without using output buffering functions:

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 " .";
    $output .= $fd;
  }
}
echo "</br>Search Complete!</p>\n";
echo $output;

 
 
 

In addition to John Smith's comment (#42939), ob_gzhandler() may still set the HTTP header "Content-Encoding" to "gzip" or "deflate" even if you call ob_end_clean(). This will cause a problem in the following situation:

1. Call ob_gzhandler().
2. Echo "Some content";
3. Call ob_end_clean().
4. Echo "New content";

In the above case, the browser may receive the "Content-Encoding: gzip" HTTP header and attempts to decompress the uncompressed "New content". The browser will fail.

In the following situation, this behaviour will go unnoticed:

1. Call ob_gzhandler().
2. Echo "Some content";
3. Call ob_end_clean().
4. Call ob_gzhandler().
5. Echo "New content";

This is because the second ob_gzhandler() will mask the absence of the first ob_gzhandler().

A solution would be to write a wrapper, like John Smith did, for the ob_gzhandler().
Adam of Fusion Bay
18-May-2006 12:38
You may want to be careful about calling ob_end_clean() from within your call-back function. I believe this can produce an endless-loop within PHP.
mrfritz379
08-Feb-2005 06: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 04: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 01: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 06: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_end_flush> <ob_clean
Last updated: Fri, 04 Jul 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites