
Webサイトにカウンターを設置したり、ユーザーエージェント(ブラウザ)などで条件分けして、表示項目や処理内容を変更したい時がある。
特に、クローラーアクセスは、大手から個人作成のボットまでいろいろとあるが、その識別はなかなか難しい。
そこで、ユーザーエージェントを識別してやるには、PHP関数のget_browserを使うのだが・・・・
この関数を使うには、
まず、Browser Capabilities Projectからbrowscap.iniをダウンロードして適当な場所に保存し、
php.ini の browscap設定の項目に「browscap.iniのフルパス」を指定して、Webサーバーを再起動しなければならない。
しかも、php.ini の browscap項目は、PHP_INI_SYSTEMモードなので、php.ini または httpd.confでしか設定できない。
なので、大概の安価な共有ホスティングサービスでは使えないことも多い。
GitHubにある、browscap-phpを使えば、上記のような設定をしなくてもbrowscap.iniを使ってユーザーエージェントを識別できるようになるらしい。
でも、おじさんには結構面倒だ。
なので、インターネットに何かないかと探したら、皆さん、browscap.iniがなくても、わりと簡単に、PHPでユーザーエージェント識別していることが分かった。
精度はともかく、結構、簡単。
PHPのスーパーグローバル変数である$_SERVER[‘HTTP_USER_AGENT’]をそのまま使って、正規表現とif文やswitch文でブラウザやデバイスを簡便に識別しているようだ。
例えば、検索エンジンのクローラーならこんな感じ。
配列$crawler_arrで設定した文字列 と $_SERVER[‘HTTP_USER_AGENT’]の文字列を比較して判定するだけ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ua = $_SERVER['HTTP_USER_AGENT']; $arr = array( "bot", "spider", "crawler", "archiver", "pagespeed", ); foreach ( $arr as $value ) { if (stripos ( $ua, $value ) !== false) { なんかの処理。} } |
完全ではないけど、そこそこクローラーを識別できるんじゃないだろうか?
この配列$arrの中身を、iPhoneやiPad、iPod、Androidなどに置き換えれば、モバイル系のスマートフォンやタブレットからのアクセスであることがわかる。
まあ、判定条件を細かくすれば、精度はかなり良くなるみたいだが、
ユーザーデバイス毎(PCとモバイルの区別)による表示サイズや項目並びの変更などであれば、この程度で十分かもしれない。