sakazuki.info

たまに近況が更新されたりします

【負荷対策】米yahoo、Bing、BAIDUなどのクローラーは予備DBに接続

calendar

reload

前回、MySQLにつながらなかった場合に予備のデータベースに接続するプログラムを書きました。

今度は、
「yahoo.com、Bing、BAIDU、Naverのクローラーがアクセスしてきた場合に
問答無用で予備のデータベースに接続させる」プログラムです。

(なお、Yahoo!Japanはグーグルエンジンを使っており
yahoo.comは海外版Yahooになります。)

アクセスログを見ると、BingとかNaverのクローラーは
めちゃめちゃな頻度でアクセスを繰り返してくれます。

その接続が多くて実際のユーザーがアクセスできなくては意味が無いので、
botのみなさまには予備のデータベースにご案内するというわけです。

なお、念のためグーグルbotだけは本体データベースに接続させます。

[php]

$filename = “mysql.ini”;

if (!file_exists($filename)){
die(“mysql.iniファイルが存在しません。”);
}Else{
$fp = fopen($filename,”r”);
if (!$fp){
die(“mysql.iniファイルが存在しません。”);
}Else{
$HostName=trim(fgets($fp));
$UserName=trim(fgets($fp));
$Password=trim(fgets($fp));
$Database=trim(fgets($fp));
}
fclose($fp);
}

$host = getenv(“REMOTE_HOST”);
//ホスト名を取得します。

$yahoo = preg_match(“/crawl.yahoo.net^/”, $host);
$msn = preg_match(“/msnbot/”, $host);
$baidu = preg_match(“/baiduspider/”, $host);
$naver =preg_match(“/naver.jp^/”, $host);
// ホスト名が、各種クローラーのホスト名と一致しているかどうか判断(部分一致で)
// 各種クローラーのホスト名はこちらを参考にしています。 http://memorva.jp/memo/website/search_engine_robot_agent.php

if(!$yahoo && !$msn && !$baidu && !$naver){
// 全てのクローラーホスト名と一致していなければ、この部分が実行されます。
$con = @mysql_connect(localhost,$UserName,$Password);
}

if (!$con){
// 接続ホスト名とクローラーのホスト名が一致していたら、問答無用でこっちを実行します。
$con = mysql_connect(“【予備DBのIP】”,$UserName,$Password);
$daitai =”アクセスが集中しているので予備のデータベースに接続しています。”;
}
if (!mysql_select_db($Database,$con)){
header(‘Location: http://【ドメイン名】/error.php’);
exit;
}
[/php]