接続障害時のメッセージ 『wordpress』


ホスティングサービスによる「mysql」の接続障害発生中に自分のサイトにアクセスする機会がありました。「wordpress」ではデータベースに接続できない場合、「403 Forbidden」のエラーが表示されるようです。
とりあえず、このままではサイトが削除されたなどの勘違いされても困るので、ソースを解析し応急処置をしました。
【wp-includes】フォルダ内の「wp-db.php」を開きます。

306行目に「 __construct 」メソッドがあります。ここで「mysql」への接続を行なっているようです。
318行目に「$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword, true);」と書かれています。接続結果を「変数dbh」に格納しています。
319行目から接続に失敗したときの処理です。「if (!$this->dbh) {失敗の処理 ;return}

失敗したときの処理の内容をみてみます。

if (!$this->dbh) {
    $this->bail(sprintf( /*WP_I18N_DB_CONN_ERROR*/'
<h1>データベース接続確立のエラー</h1>
<p>これは <code>wp-config.php</code> ファイルのユーザー名とパスワードが間違っているか、<code>%s</code> のデータベースサーバーに接続できないかのどちらかを意味します。ホストのデータベースサーバーがダウンしているのかもしれません。</p>
<ul> <li>ユーザー名とパスワードに間違いはありませんか ?</li> <li>ホスト名に間違いはありませんか ?</li> <li>データベースサーバーは動いていますか ?</li> </ul>
<p>上記の用語がよく分からなければ<strong>サーバーの管理者にお問い合わせください</strong>。助言が必要であれば
<a href=\'http://ja.forums.wordpress.org/\'>WordPress 日本語フォーラム</a>を訪れるといいでしょう。(訳注: オリジナルのリンク先は<a href=\'http://wordpress.org/support/\'>WordPress サポートフォーラム (英語)</a>)</p>
'/*/WP_I18N_DB_CONN_ERROR*/,
$dbhost)); return; }

接続失敗したときのメッセージが書かれていますが、これはwordpress設定時に表示されるメッセージのようです。ユーザページのブログ画面では表示されません。私は設定が終わってデータベースを接続できることが確認できているのでメッセージを変更し、ここで直接メッセージ表示処理を行ないました。

if (!$this->dbh) {
    echo "申し訳ありません。<br>";
    echo "ただいまデータベースの接続障害が発生しております。<br>";
    echo "復旧までしばらくお待ちください。";
    exit;
}

これでブログ画面でも接続障害が発生した場合にメッセージが表示されました。
応急処置なのでプラグインなどきちんとした方法での仕方を調べてみます。
これは「wordpress」のコアプログラム直接修正しているのでお勧めできる方法ではありません。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です