输出缓冲区错误处理
Output buffer error handling
让我们假设一个简单的片段用于模板并且是 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 and shutdown handler 处理)
<?php
echo "before";
echo $someVariable; //$someVariable is undefined here
echo "after";
输出
before <- would like to avoid
some message from the error handler
问题:是否可以避免文件出错时的任何输出?
是的,
我 read/analysed 也有类似的问题,但其中 none 给了我一个明确的答案,不管这是不是。
Errors inside of output buffer
How to see php error in included file while output buffer?(@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';
?>
这只会输出'An error has occured.'
但是使用 set_error_handler 它将输出 'An error has occured.after' 除非你添加一个 DIE() 或类似于错误处理程序的东西。
让我们假设一个简单的片段用于模板并且是 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 and shutdown handler 处理)
<?php
echo "before";
echo $someVariable; //$someVariable is undefined here
echo "after";
输出
before <- would like to avoid
some message from the error handler
问题:是否可以避免文件出错时的任何输出?
是的,
我 read/analysed 也有类似的问题,但其中 none 给了我一个明确的答案,不管这是不是。
Errors inside of output buffer
How to see php error in included file while output buffer?(@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';
?>
这只会输出'An error has occured.'
但是使用 set_error_handler 它将输出 'An error has occured.after' 除非你添加一个 DIE() 或类似于错误处理程序的东西。