嗯......这是我的情况:我正在开发一个框架,我目前正在开发错误处理功能。我也想处理错误处理错误!好吧......更好地解释:如果我有一个错误,无论是否致命,都会引发异常(在非致命错误的情况下)并伪造 Exception 用于致命错误。异常由“记录器”处理,它可以处理错误在控制台(浏览器)上回显或将其存储在文件中。问题是当记录器内发生第二个致命错误时。为了捕捉它,我使用了 PHP 缓冲区 (ob_start())。在这个函数内部不应该发生错误,任何人......换句话说......这是错误跟踪的最后一级。我可以只回显错误,但我想使用 PHP 错误日志系统注册它们(如果没有达到最后一级则禁用)。这可以使用 error_log 函数来实现。
“成功时返回 TRUE,失败时返回 FALSE。”
嗯……这就是我需要的。但我很害怕,因为我不知道这个函数是否会产生致命错误(内部实现)或者只是返回 TRUE/FALSE。我在 localhost SMTP 中使用邮件选项 (1) 进行了测试,但失败了(正如预期的那样!),生成了一条警告消息。然后缓冲区崩溃在浏览器上显示空白页面(这是我不希望发生的)。这个问题可以通过使用 fsockopen 检查 smtp 连接并将返回值归因于类变量来解决。在缓冲函数内部,这个变量值被验证。如果为 TRUE,则调用带有电子邮件选项的 error_log。但是对于带有选项 0(php 文件日志)和 3(其他文件)的 error_log?
这是我的日志记录类的相关部分:
public function error_buffer($buffer) {
$error = error_get_last ();
if ($error && ($error ['type'] & E_FATAL && $this->_errhe)) {
$this->error_handler_error ( $error ['type'], $error ['message'], $error ['file'], $error ['line'] );
if (ENV === 'production') {
return 'error 500';
}
return ob_get_contents ();
}
return $buffer;
}
public function error_handler_error($errno, $errmsg, $errfile, $errline) {
var_dump ( $errfile );
/* GENERATES WARNING MESSAGE... AND BLANK PAGE!
* Here is possible to do: if($this->_email) { error_log() }...
*/
@error_log ( $errmsg, 1, 'lucas@lucas.com' );
// error_log($errmsg, 0);
}