文字

ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_clean得到当前缓冲区的内容并删除当前输出缓。

说明

string ob_get_clean ( void )

得到当前缓冲区的内容并删除当前输出缓冲区。

ob_get_clean() 实质上是一起执行了 ob_get_contents() ob_end_clean()

返回值

返回输出缓冲区的内容,并结束输出缓冲区。如果输出缓冲区不是活跃的,即返回 FALSE

范例

Example #1 A simple ob_get_clean() example

<?php

ob_start
();

echo 
"Hello World" ;

$out  ob_get_clean ();
$out  strtolower ( $out );

var_dump ( $out );
?>

以上例程会输出:

string(11) "hello world"

参见

  • ob_get_contents() - 返回输出缓冲区的内容
  • ob_start() - 打开输出控制缓冲

用户评论:

[#1] geo dot artemenko at gmail dot com [2014-03-12 22:04:49]

The definition should mention that the function also "turns off output buffering", not just cleans it.

[#2] paul+phpnet at earth2me dot com [2013-10-08 00:08:58]

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();
?>

[#3] sergei dot solomonov at gmail dot com [2012-08-25 16:20:19]

<?php
ob_start
();
echo 
"1";
$content ob_get_clean();

echo 
"2";
$content .= ob_get_clean();

echo 
$content;
?>


This script outputs 21 in CLI mode and 12 otherwise (under my apache and nginx)

[#4] steven at bielik dot com [2011-02-21 23:57:36]

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 ...

[#5] ludvig dot ericson at gmail dot com [2005-08-10 07:10:36]

Notice that the function beneath does not catch errors, so throw in an @ before those ob_* calls

[#6] webmaster at ragnarokonline dot de [2003-10-01 17:21:28]

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;
    }
}
?>

上一篇: 下一篇: