我有一个MYSQL表,如果在程序执行期间发生了任何错误,它会记录数据库错误。这部分工作正常。
现在,我计划通过在发生数据库错误时触发邮件来扩展功能。所以我可以尽快参加。
我遇到的问题是如果发生一个错误,我会收到一封邮件。如果发生100个错误,我会收到100封无用的邮件。我想做的是尽管在一小时内发生了多少错误,但仍然可以收到一封邮件。现在我只是使用PHP邮件功能在我向表中插入数据时发送邮件。
鉴于我不能写一个每小时发送一次邮件的cron作业,因为我想在发生错误时立即收到邮件。
我怎样才能完成它?
答案 0 :(得分:0)
您也可以在数据库表中有一个标志,用于存储是否已通过电子邮件报告该错误以及发生错误的日期时间。决定您希望收到电子邮件报告的时间,例如每小时一小时。然后,当您发现错误并将其插入数据库时,请检查是否有任何未完成的错误要报告,以及他们的时间戳是否超过您决定的时间,如果是,请将它们全部分组并通过电子邮件发送报告。
答案 1 :(得分:0)
我做的是
发生数据库错误意味着它可能是一个简单的错误或致命的错误,如MySQL服务器已经消失。那时尝试访问数据库将毫无用处。
我知道它只有删除文件的手动工作。但是你通过使用这种方法解决了很多问题。
/**
* THIS FUNCTION LOGS THE ERRORS TO THE FILE
* @param string $error_details Details of The Error
* @return bool
*/
function saveErrorToFile($error_details){
$file_path = JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'error_log.txt';
if(!JFile::exists($file_path ))
{
//create the file and write the error
JFile::write($file_path,$error_details);
//send the mail with the error
$mail =& JFactory::getMailer();
$mail->setSender(array('support@abc.com', 'support'));
$mail->setSubject('DATABASE ERROR');
$mail->setBody($error_details);
$mail->IsHTML(true);
$mail->addRecipient('dasun@abc.com');
$mail->Send();
}
else
{
//read the existing content of the file and append with the new error
$file_content = JFile::read($file_path);
$file_content = $file_content."\n\n".$error_details;
JFile::write($file_path,$file_content);
}
return true;
}