我多年前发现了这个代码段,它总是对我很好,但我最近发现error_get_last()
和任何自定义错误处理程序都会忽略@
并且仍然触发。
建议的方法是检查是否error_reporting() == 0
按照 https://www.php.net/manual/en/language.operators.errorcontrol.php#104545
与其为黑客变通方法制定一个笨拙的解决方法,我宁愿根本不使用错误抑制,但我不清楚如何正确设置条件以使此狙击手正常运行。谷歌搜索表明使用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();
如本说明所示,可以通过以下方式刷新所有输出缓冲区:
while (ob_get_level() > 0) {
ob_end_flush();
}
flush();