让我们假设一个简单的片段用于模板,并且是using output control (ob)
public function capture($file, array $args = array())
{
extract($args, EXTR_SKIP);
ob_start();
require $file; //'foo.php'
return ob_get_clean();
}
foo.php
有错误(由error handler和shutdown handler处理)
<?php
echo "before";
echo $someVariable; //$someVariable is undefined here
echo "after";
输出
before <- would like to avoid
some message from the error handler
问题:错误时是否可以避免文件中的任何输出?
是,
我有类似的问题,我读过/分析过,但没有一个问题给我一个明确的答案,不论这是不是。
Errors inside of output buffer
How to see php error in included file while output buffer?(@ marc-b - 可能不是&#39;
我知道您不应该在自己的代码中处理这种错误,因为它必须是干净的&amp;测试过,但你可能会得到一些,例如错字,未定义变量等
答案 0 :(得分:4)
如果使用关闭处理程序而不是错误处理程序,它可以清除输出,因为错误处理程序只能在它之前清除输出,因此在它之后输出的任何内容仍将呈现。
<?php
function error_handler()
{
if(error_get_last()) {
ob_get_clean();
echo 'An error has occured.';
}
}
register_shutdown_function('error_handler');
function capture()
{
ob_start();
require 'foo.php';
return ob_get_clean();
}
echo capture();
// foo.php
<?php
echo 'before';
echo $variable;
echo 'after';
?>
这只会输出&#39;发生了错误。&#39;
然而,使用set_error_handler,它将输出&#39;出现错误。之后&#39;除非您添加DIE()或类似于错误处理程序的东西。