0

我有一个如下的 MYSQL 表,如果在程序执行期间发生任何错误,它会记录数据库错误。这部分工作正常。

在此处输入图像描述

现在我打算通过在发生数据库错误时触发邮件来扩展功能。所以我可以尽快参加。

我遇到的问题是,如果发生一个错误,我会收到一封邮件。如果发生 100 个错误,我会收到 100 封无用的邮件。尽管一个小时内发生了多少错误,我想要做的是收到一封邮件。现在我只是在向表中插入数据时使用 PHP 邮件函数发送邮件。

鉴于我无法编写一个每小时向我发送一次邮件的 cron 作业,因为我想在发生错误时立即获取邮件。

我怎样才能完成它?

4

2 回答 2

0

您也可以在 DB 表中设置一个标志,用于存储该错误是否已通过电子邮件报告以及错误发生的日期时间。决定您想要获取电子邮件报告的时间,例如每小时整点。然后,当您发现错误并将其插入数据库时​​,检查是否有任何未解决的错误要报告,以及它们的时间时间戳是否超过了您确定的时间,如果是,则将它们全部分组并通过电子邮件发送报告。

于 2013-04-22T11:04:14.360 回答
0

我所做的是

发生数据库错误意味着它可能是一个简单的错误或致命的错误,例如 MySQL 服务器已消失。那时尝试访问数据库将毫无用处。

  • 即时创建错误日志文件。
  • 如果文件大小为 0 字节/不存在,我会触发一封电子邮件,然后将错误记录到新创建的文件中。
  • 如果发生更多错误,我会将它们全部记录下来。
  • 处理错误后,我清除/删除文件。
  • 下次发生错误时,我再次收到邮件。

我知道它具有删除文件的唯一手动工作。但是你用这个方法解决了很多问题。

     /**
     * 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;  
    } 
于 2013-04-28T05:04:25.983 回答