【问题标题】:Why ob_get_clean() does not work in body of a function?为什么 ob_get_clean() 在函数体中不起作用?
【发布时间】:2011-08-30 15:36:36
【问题描述】:

我正在使用下面的代码记录错误并将错误发送到我的电子邮件,但我不知道为什么当我检查我的电子邮件时$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);
}

【问题讨论】:

    标签: php debugging error-handling


    【解决方案1】:

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

    您可能遇到的另一个问题是您使用 2 个参数调用 mail(),而它需要 3 个(地址、主题、内容)。你可能想要这样的东西:

    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);
    }
    

    【讨论】:

    • 不,我只想收到一封电子邮件,并且会收到一封,但没有空的 $content
    • 你的意思是你想要一封电子邮件,包含在 LAST 错误点的所有脚本输出,还是一封包含脚本在 FIRST 错误点的输出的电子邮件,还是您以某种方式保证此脚本只会抛出一个错误?
    • 对不起,我必须更清楚,我希望在我的电子邮件中出现每个错误和$content。 (所以我可能有3个错误,如果$content被邮寄3次没有问题,因为这只是一个临时错误调试)
    • 是的,我认为我必须使用ob_get() 而不是ob_get_clean() 但无论如何ob_get() 也是空的,我认为问题是我不能在函数内调用任何ob_*!是这样吗?
    • 不,这与我调用 mail() 无关,因为我会收到电子邮件,但使用此正文:Error Happend:
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多