让我们假设使用一个简单的代码片段进行模板制作,并使用输出控制(ob)
public function capture($file, array $args = array())
{
extract($args, EXTR_SKIP);
ob_start();
require $file; //'foo.php'
return ob_get_clean();
}
并且foo.php
有一个错误(由错误处理程序和关闭处理程序处理)
<?php
echo "before";
echo $someVariable; //$someVariable is undefined here
echo "after";
输出
before <- would like to avoid
some message from the error handler
问题:是否可以避免在出错时从文件中输出任何信息?
是的,
我曾经阅读/分析过类似的问题,但是无论是不是,都没有一个明确的答案。
如何在输出缓冲区时查看包含文件中的php错误?(@ marc-b-可能不是)
我了解您不应该在自己的代码中处理此类错误,因为必须进行清洁和测试,但仍然可能会遇到一些错误,例如错字,未定义的变量等。
如果使用关闭处理程序而不是错误处理程序,则它可以清除输出,因为错误处理程序只能在输出之前清除输出,因此在输出之后仍将呈现任何内容。
<?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';
?>
这只会输出“发生错误”。
但是,除非您添加DIE()或类似于错误处理程序的内容,否则使用set_error_handler它将输出“发生了一个错误。之后”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句