2017-07-26 17 views
1

私のウェブホストは現在、私のウェブサイトのデータベースに問題があり、接続を試みるとエラーメッセージが表示されます。私は自分のサイトにいたので、すぐにそれについて学びましたが、今では、このタイプの問題の通知を将来的にどうやるのが最善の方法なのかと思っています。私の最初の本能は、このような(省略)コードブロックを行うことでした。PHPでDB接続に失敗した場合の処理​​と通知

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ジョブスクリプトが私に電子メールを送信します。私は30分ごとに仕事をしているので、過度の通知で私を圧倒することはありません。それは明らかに瞬間的ではありませんが、サイト上の私のニーズにはうまくいきます。

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

あなたはサーバーに読み書きするファイルを持っています。 With php: データベースにフラグが立てられているかどうかを最初にチェックするコードで、データベースにフラグを立てます。したがって、catchブロックでは、問題のファイルをデータベース名でスキャンできます。 既にフラグが立てられておらず、ダウンしている場合は、電子メールを送信してください。また、データベース名をファイルに書き込みます。 サーバーが再起動すると、管理者はフラグをクリアする必要があります。

1

最も簡単な解決策は、サイト稼働時間モニタによって確認されるカナリー/ステータスページです。これは警告を発することができます。ページにエラーが返された場合は、テキストまたは電子メールが届きます。

もちろん、もっと複雑なルートがありますが、必要としているものは過度のものです。

関連する問題