使用这个简单的脚本:
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(),以重新打开缓冲。