2011-08-30 33 views
0

我正在使用以下代码进行日志记录并将错误发送至我的电子邮件,但我不知道为什么$content变量在检查我的电子邮件时不包含任何内容。这是范围错误吗?或者我做错了什么?为什么ob_get_clean()在函数体中不起作用?

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

回答

2

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

您可能遇到的另一个问题是,当您期待3(地址,主题,内容)时,您打电话给mail()带有2个参数。你可能想是这样的:

mail('[email protected]', '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('[email protected]', 'Error Happened', $content); 
} 
+0

不,我只是想获得一个电子邮件,会得到一个,但没有空$内容 –

+0

你的意思是你需要一封电子邮件,其中包含在LAST错误时脚本的所有输出,或包含脚本在FIRST错误点输出的单个电子邮件,或者您是以某种方式保证只有一个错误会发生由这个脚本抛出? –

+0

对不起,我必须更清楚,我希望我的电子邮件中的每个错误和'$ content'。 (所以我可能有3个错误,如果$内容邮寄3次没有问题,因为这只是一个临时的错误调试) –

相关问题