在使用输出缓冲时,如果包含的文件在输出缓冲区关闭之前调用了 die(),则会刷新而不是清除该文件。也就是说,默认情况下会调用 ob_end_flush()。
<?php
// a.php(此文件永远不应该显示任何内容)
ob_start();
include('b.php');
ob_end_clean();
?>
<?php
// b.php
print "b";
die();
?>
这最终会打印“b”而不是什么都没有,因为调用了 ob_end_flush() 而不是 ob_end_clean()。也就是说,die() 会刷新缓冲区而不是清除它。我花了一段时间才确定是什么导致了刷新,所以我想分享一下。