概要
標準では使えないget_browser()関数を使うために、browscap.iniファイルをダウンロードし、php.iniの設定を行う。
最近ボットのアクセス頻度が多くなったため、ボット判定のために何かないかなと思っていたところ、この関数を見つけたのでメモ。
参考URL
PHPマニュアル
ダウンロード
browscap.ini
ここからphpのものをDLする。
/etc/php.d/browscap.ini
に配置する。
どこか適当な場所に配置する。
設定
/etc/php.ini
browscap = /etc/php.d/browscap.ini
browscap = 配置したパス
※httpdの再起動
/etc/rc.d/init.d/httpd restart
ファイルの更新
browscap.ini は PHP にはバンドルされていません。 しかし、ここで最新の » php_browscap.ini を入手することができます。
browscap.ini は多くのブラウザに関する情報をもっていますが、 データベースを最新に保つのはユーザーによる更新に依存しています。 ファイルのフォーマット自体を見ればおおよそのことがわかります。
上記のようにマニュアルに書いてある。
i.e.古くなったら自分で更新してねってこと。。。
You shall not mirror the files without prior authorization.
※自動化すると、アクセスを拒否されるおそれがあるのでしないほうがいいです。
[訂正]自動化するのはOKだけど、24時間以内に10回以上のアクセスをすると、アクセス制限がかけられます。
403-6 Errorが表示されたので、google先生に翻訳の相談をしながら、問い合せてみました。
つくったShellをテストするために何度か実行したら上のエラーが表示されたとういうのは内緒。。。
Bot判定のサンプル
// member var
public $_bots = array(
'Googlebot',
'bingbot',
'NHN Corp',
'MLBot',
'SurveyBot',
);
// method
/**
* Botを判定する
* @return boolean
*/
function isBot($isBrowsercap = true, $ua = null){
if($isBrowsercap == true){
$browser = get_browser(null, true);
if($browser['crawler'] == true){
return true;
}
}
if ($ua == null) {
$ua = $_SERVER['HTTP_USER_AGENT'];
}
$botlist = "/(" . implode("|", $this->_bots) . ")/";
if (preg_match($botlist, $ua)) {
return true;
}
return false;
}
get_browserを使った場合でも弾けなかったものを、自分で追加して弾くようにする。
判定方法
判定方法は、ipアドレスではなく、User Agentからキーワードが含まれていないかを検索することにした。
なぜなら、ipアドレスの管理は大変だから。。。
使われていたものが急に使われなくなったり、使われていなかったものが急に使われたりするようになることもあるから。