Also, don't forget that you will need to ob_start() again for any successive calls:
<?php
ob_start();
echo "1";
$content = ob_get_clean();
ob_start(); // This is NECESSARY for the next ob_get_clean() to work as intended.
echo "2";
$content .= ob_get_clean();
echo $content;
?>
Output: 12
Without the second ob_start(), the output is 21 ...
ob_get_clean
(PHP 4 >= 4.3.0, PHP 5)
ob_get_clean — Lit le contenu courant du tampon de sortie puis l'efface
Description
string ob_get_clean
( void
)
Lit le contenu courant du tampon de sortie puis l'efface.
ob_get_clean() exécute successivement ob_get_contents() et ob_end_clean().
Valeurs de retour
Retourne le contenu du tampon de sortie et termine la session de tamporisation. Si la tamporisation n'est pas activée, alors FALSE sera retourné.
Exemples
Exemple #1 Exemple avec ob_get_clean()
<?php
ob_start();
echo "Bonjour le monde !";
$out = ob_get_clean();
$out = strtolower($out);
var_dump($out);
?>
L'exemple ci-dessus va afficher :
string(18) "bonjour le monde !"
Voir aussi
- ob_get_contents() - Retourne le contenu du tampon de sortie
- ob_start() - Enclenche la tamporisation de sortie
steven at bielik dot com
22-Feb-2011 12:57
56ka dot prog at gmail dot com
13-Sep-2010 07:27
Hi
Warning, this command isn't exactly like ob_get_contents() and ob_end_clean() successively. Sometimes you will have to do these two commands manually.
Today I lost 2 hours to localize that problem and to find the solution -_-'
See you
profix at cms-studio dot net
09-Jul-2008 09:01
Maybe it can be useful
$__ob_stack=array();
function ob_break() {
global $__ob_stack;
while (ob_get_level()>0)
array_push($__ob_stack,ob_get_clean());
}
function ob_continue() {
global $__ob_stack;
while (count($__ob_stack)>0) {
ob_start();
echo array_pop($__ob_stack);
}
}
ob_start();
echo "1"; // now we write to "ob" buffer
ob_break();
echo "2"; // now we write to stdout
ob_continue();
echo "3"; // now we write again to "ob" buffer
$output=ob_get_clean();
echo $output;
// output is 213
egbert teeselink
02-Feb-2008 08:47
If you're trying to capture the output from an included 3rd party script you don't seem to be capturing everything, the following might help:
function ob_end_clean_all()
{
$s = "";
do
{
$s = ob_get_contents() . $s;
} while(ob_end_clean());
return $s;
}
This function closes all nested output bufferings, therefore closing any buffers that the included script does not explicitly close. It's basically a ob_end_clean that sweeps together all the output buffers instead of just the innermost one.
ludvig dot ericson at gmail dot com
10-Aug-2005 09:10
Notice that the function beneath does not catch errors, so throw in an @ before those ob_* calls
webmaster at ragnarokonline dot de
01-Oct-2003 07:21
Running PHP4 < 4.3.0, you can simply add the following to use the function anyway:
<?php
if (!function_exists("ob_get_clean")) {
function ob_get_clean() {
$ob_contents = ob_get_contents();
ob_end_clean();
return $ob_contents;
}
}
?>
