ob_get_clean,只工作两次


ob_get_clean, only works twice

使用这个简单的脚本:

ob_start();
$text = array();
echo 'first text';
$text[] = ob_get_clean();
echo 'second text';
$text[] = ob_get_clean();
echo 'third text';
$text[] = ob_get_clean();
echo 'fourth text';
$text[] = ob_get_clean();
print_r($text);

该输出:

third textfourth textArray
(
    [0] => first text
    [1] => second text
    [2] => 
    [3] => 
)

但我希望:

Array
(
    [0] => first text
    [1] => second text
    [2] => third text
    [3] => fourth text
)

PHP隐藏

要正确执行您应该在ob_get_clean()之后执行ob_start(),因为ob_get_clean()获取当前缓冲区内容并删除当前输出缓冲区。

<?php
ob_start();
$text = array();
echo 'first text';
$text[] = ob_get_clean();
ob_start();
echo 'second text';
$text[] = ob_get_clean();
ob_start();
echo 'third text';
$text[] = ob_get_clean();
ob_start();
echo 'fourth text';
$text[] = ob_get_clean();
print_r($text);
?>

每次调用ob_get_clean()之前,都需要再次调用ob_start()

ob_start();
$text = array();
echo 'first text';
$text[] = ob_get_clean();
ob_start();
echo 'second text';
$text[] = ob_get_clean();
ob_start();
echo 'third text';
$text[] = ob_get_clean();
ob_start();
echo 'fourth text';
$text[] = ob_get_clean();
print_r($text);

ob_get_clean关闭输出缓冲。它真的应该只给你第一个。它显示了两个,因为有第二层输出缓冲处于活动状态。

尝试使用:

$text[] = ob_get_contents();
ob_clean();

来自php.org:

ob_get_clean()本质上同时执行ob_get_contents()和ob_end_clean。

ob_get_clean()

当调用ob_end_clean()时,它会关闭缓冲。您需要再次调用ob_get_start(),以重新打开缓冲。