2017-07-26 56 views
1

我的网络主机当前与我的网站上的其中一个数据库有关,并且在尝试连接时收到错误消息。我碰巧在我的网站上,所以我几乎立即就了解了它,但现在我想知道在未来为这类问题获得某种通知的最佳方式是什么。我的第一反应是做一个(略)代码块这样的:在PHP中处理和通知数据库连接失败

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

但后来我很快就看到了这个安全漏洞是每一次我的网页被击中的电子邮件。我有一个关于在数据库中输入错误的简要思考,但是如果存在数据库连接问题,那看起来似乎不是特别有用的学习错误的方法。

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

回答

0

其他评论中的建议给我留下了一个想法,我现在已经在我的网站上实现了这个想法。我只是简单地创建了一个尝试连接到数据库的cron作业,如果发生错误,cron作业脚本会向我发送一封电子邮件。由于我每三十分钟就有一次工作,所以它不会以过多的通知压倒我。它显然不是即时的,但可以满足我在网站上的需求。

0

如何创建一个文件作为你的国旗?像这样的东西

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

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

1

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

当然有更复杂的路线可以采取,但他们会为你需要的东西矫枉过正。