update: 18view
アクセス数がおかしい。それはbotの仕業かな【phpで除外してみた】
明らかにおかしい。
前々からおかしいことには気付いていた。
アナリティクスをみてもアクセス数が伸びているわけではないのに、
ページごとのアクセス数は毎日伸びるわけ。
おかしすぎるな、と。
サーバのログを調べてみると。
やはりbotが多いみたい。。。
ページごとのアクセス計測はphpで自作なので、アクセス数計測の改修をしましょう。
PHPでアクセス数の書き込みから除外したい
アクセスを除外するのではなく、アクセス数の加算からbotを除外したいです。
除外する手順
- PHPでユーザーエージェントを取得
- 取得したユーザーエージェントの中に「bot」があるか判別
- 「bot」がなければアクセス数を増やす
1.は
$ua = $_SERVER['HTTP_USER_AGENT'];
で、変数uaにユーザーエージェントを格納します。
2.は1.の変数$uaの中にbotが含まれているかの判別です。
preg_matchの正規表現でマッチするか判別し、マッチした場合は1を返します。
書き方は
preg_match('/bot\//i', $ua)
です。
もし「bot」という文字列がなかったら場合、
要は返り値が1じゃない場合にアクセス数を加算
というのをif文を使って記述します。
if(preg_match('/bot\//i', $ua) !== 1){
とすれば。
もし「bot」という文字列がなかった場合、返り値が1じゃないため、if文の中に入れます。
よって。
botを除外する場合、こうなります。
$ua = $_SERVER['HTTP_USER_AGENT'];
if(preg_match('/bot\//i', $ua) !== 1){
//アクセス数を加算する処理
}
よしっ!できた~と思ったんですが。
botだけじゃなく自アクセスも除外したいな。。。
PHPで自アクセスの除外
自分でページを更新したら確認します。
たまに見返ししたりもします。
この際、自アクセスも除外しちゃいましょう。
除外する手順
- PHPでIPアドレスを取得
- 取得したIPアドレスと自分のIPアドレスが一致するか判別
- 一致しなければアクセス数を増やす
訪問者のIPアドレスは
$_SERVER["REMOTE_ADDR"];
の返り値で取得できます。
自分のIPアドレスがわからない場合は下記サイトから取得できます。
IPアドレスを調べる⇒https://www.cman.jp/network/support/go_access.cgi
2.の訪問者のIPアドレスと自分のIPアドレスが一致するかの判別は
if($_SERVER['REMOTE_ADDR'] !== "xxx.xxx.xxx.xxx"){
です。
一致しなかった場合、if文の中に入ります。
よって。
自分のIPアドレスを除外するのはこうなります。
if($_SERVER['REMOTE_ADDR'] !== "xxx.xxx.xxx.xxx"){
//アクセス数を加算する処理
}
phpでbotも自アクセスも除外する方法
ユーザーエージェントを取得しbotが入っていない、プラス、自分のIPアドレスではない場合の記述です。
$ua = $_SERVER['HTTP_USER_AGENT'];
if((preg_match('/bot\//i', $ua) !== 1) && ($_SERVER['REMOTE_ADDR'] !== "xxx.xxx.xxx.xxx")){
//アクセス数を加算する処理
}
これでページのアクセス数は正確な数値、完成~