PHPにてサーバ接続状態で接続するDBを変更

急なアクシデントでDBサーバに接続出来なくなることがたまにある。

大体において本番環境はRAID組んでいたりで大丈夫なんだけど、開発環境ではそうもいかなかったりする。

そんなときに別のサーバに接続させる設定。

繋がるか(ソケット送れるか)否かでDBを変更する形。

$dbs = [
  [ // 優先度1
    'db'   => 'mysqli',
    'host' => '192.168.0.10',
    'port' => 80,
    'user' => 'user',
    'pass' => 'pass',
    'name' => 'db_a',
  ],[  // 優先度2
    'db'   => 'mysqli',
    'host' => '192.168.0.100',
    'port' => 3000,
    'user' => 'root',
    'pass' => '',
    'name' => 'db_b',
  ],[  // 優先度3
    'db'   => 'mysqli',
    'host' => '192.168.0.111',
    'port' => 1000,
    'user' => 'root',
    'pass' => '',
    'name' => 'db_a',
  ],
];

foreach($dbs as $db_key => $db_val){
  $fp = @fsockopen($db_val['host'], $db_val['port'], $errno, $errstr, 1);
  if (!$fp) {  // 接続失敗
    continue;
  }
  $set_db = $db_val; // 接続せしDB情報
  break; // 抜ける
}
if (!isset($set_db)) {
  exit('接続出来ぬ!');
}

///// ここからは自分の環境に合わせて書いたら良いもの /////
// 例としてPDO
$temp = $set_db['db'].':dbname='.$set_db['name'].';host='.$set_db['host'].';port='.$set_db['port'].';';
$dbh = new PDO($temp,$set_db['user'],$set_db['pass']);

コメント

タイトルとURLをコピーしました