为什么ob_get_clean()在函数体中不起作用?

时间:2011-08-30 15:36:36

标签: php debugging error-handling

我正在使用以下代码记录并向我的电子邮件发送错误,但我不知道为什么$content变量在我检查我的电子邮件时不包含任何内容。这是范围错误吗?或者我做错了什么?

ob_start();
set_error_handler('cs_handler', E_ALL);

//a lot includes and method calls here

function cs_handler($errno, $errstr, $errfile, $errline)
{
    $content = ob_get();
    mail(...., 'Error Happend: '.$content);
}

1 个答案:

答案 0 :(得分:2)

一个问题是,如果您希望每页多个错误正常工作,则需要在刷新缓冲区后再次调用ob_start()。这可能是问题吗?您是否收到一封包含内容的电子邮件,其他人没有?

您可能遇到的另一个问题是,当您预期3(地址,主题,内容)时,您正在使用2个参数调用mail()。你可能想要这样的东西:

mail('you@example.com', 'Error Happened', $content);

请注意,以下内容符合预期:

ob_start();
set_error_handler('cs_handler', E_ALL);

echo 'begun';

echo $arr['test']; // This throws a warning, handled by the function below

function cs_handler($errno, $errstr, $errfile, $errline)
{
    $content = ob_get_clean();
    mail('you@example.com', 'Error Happened', $content);
}