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

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

最佳答案

一个问题是,如果要使每页多个错误正常工作,则在刷新缓冲区后,您需要再次调用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);
}

关于php - 为什么ob_get_clean()在函数体中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245825/

相关文章:

variables - 在经典ASP中传递变量

c# - 将代码转换为 C#?

php - PDO 在 wamp 服务器上的 php 中不起作用

php - 使用 laravel 获取具有子类别的类别

javascript - WP - 在 JS 中获取 stylesheet_directory

javascript - 如何保持 Javascript 开发变量的观察点?

android - 在 Android 上的 NDK 库中使用 Clang 地址清理程序

Perl 调试器 - 如何跳出循环

C# HttpWebRequest SEC_I_RENEGOTIATE 间歇性错误

java - android 互联网连接可用性