PHP中DB连接失败的处理和通知

PHP中DB连接失败的处理和通知,php,Php,我的web主机当前与我网站上的一个数据库发生问题,尝试连接时收到错误消息。我碰巧在我的网站上,所以我几乎立刻就知道了,但现在我想知道,在将来,对于这类问题,最好的办法是获得某种通知。我的第一反应是做一个(缩写的)代码块,如下所示: try { $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_

我的web主机当前与我网站上的一个数据库发生问题,尝试连接时收到错误消息。我碰巧在我的网站上,所以我几乎立刻就知道了,但现在我想知道,在将来,对于这类问题,最好的办法是获得某种通知。我的第一反应是做一个(缩写的)代码块,如下所示:

try {  
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);  
}  
catch(PDOException $e) {  
 $msg = $e->getMessage();
 mail($to,$subject,$msg,$headers); 
}  
但随后我很快发现,每次我的页面被点击时,都会有一封电子邮件出现漏洞。我曾想过在数据库中输入错误,但如果存在数据库连接问题,这似乎不是了解错误的特别有用的方法


关于如何处理这种情况,还有其他想法吗?实时通知是首选,但在通知超出我的范围时,访问网站将比我现在拥有的更好。

创建一个文件作为您的标志如何?像这样的

try {  
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
}
catch(PDOException $e) {
    $flag_file = 'db_error_flag.txt';
    if ( !file_exists( $flag_file ) ) {
        $msg = $e->getMessage();
        mail($to,$subject,$msg,$headers);

        $file = fopen( $flag_file, 'w' );
        fwrite( $file, $msg );
        fclose( $file );
    }
}

在服务器上有一个读写文件。 使用php: 使用代码标记已关闭的数据库,该代码首先检查文件中是否标记了该数据库。因此,在catch块中,您可以扫描相关文件以查找数据库名称。 如果它还没有被标记,并且已经关闭,那么发送一封电子邮件。另外,在文件中写入数据库名称。
当服务器重新启动时,管理员应清除该标志。

最简单的解决方案是一个由站点正常运行时间监视器检查的金丝雀/状态页面,它可以提醒您。如果页面返回错误,您将收到文本或电子邮件


当然,还有更复杂的路线要走,但对于你所需要的东西来说,这些路线太过复杂了

其他评论中的建议给了我一个想法,我现在已经在我的网站上实现了这个想法。我只是创建了一个试图连接到数据库的cron作业,如果出现错误,cron作业脚本会向我发送一封电子邮件。因为我每30分钟运行一次作业,所以不会有过多的通知让我不知所措。它显然不是即时的,但能很好地满足我在网站上的需求