如何在不抑制错误的情况下正确刷新缓冲区

How to properly flush buffer without error suppression

提问人:ParoX 提问时间:9/27/2022 最后编辑:OlivierParoX 更新时间:10/3/2022 访问量:382

问:

我多年前发现了这个片段,它总是对我很好,但我最近发现,任何自定义错误处理程序都会忽略并且仍然触发。error_get_last()@

推荐的方法是检查是否符合 https://www.php.net/manual/en/language.operators.errorcontrol.php#104545error_reporting() == 0

与其为骇人听闻的解决方法做一个骇人听闻的解决方法,我宁愿根本不使用错误抑制,但我不清楚如何正确设置条件以使这个狙击手正常运行。谷歌搜索表明使用,并以各种但相互矛盾的方式使用。ob_get_level()ob_get_length()ob_get_contents()

删除错误抑制并将 if 语句检查添加到以下内容的最佳方法是什么:

// Fill-up 4 kB buffer (should be enough in most cases).
echo str_pad('', 4 * 1024);
echo '<!-- -->';

// Flush all buffers.
do {
    $flushed = @ob_end_flush();
} while ($flushed);
@ob_flush();
flush();
php-7 输出缓冲

评论


答:

2赞 Olivier 10/3/2022 #1

本说明所示,可以按以下方式刷新所有输出缓冲器:

while (ob_get_level() > 0) {
    ob_end_flush();
}

flush();