ユーザーの統計を作成していますが、ボットからの訪問をカウントしたくありません。
これで、ページが呼び出されるたびに mysql が 1 ずつ増える基本的な php ができました。
ただし、ボットもカウントに追加されます。
誰でも方法を考えることができますか?
主に、物事を台無しにする主要なものです。Google、Yahoo、Msn など。
ユーザーの統計を作成していますが、ボットからの訪問をカウントしたくありません。
これで、ページが呼び出されるたびに mysql が 1 ずつ増える基本的な php ができました。
ただし、ボットもカウントに追加されます。
誰でも方法を考えることができますか?
主に、物事を台無しにする主要なものです。Google、Yahoo、Msn など。
ユーザー エージェント文字列、空の文字列、または「robot」、「spider」、「crawler」、「curl」を含む文字列がロボットである可能性があることを確認できます。
preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));
ユーザーエージェント文字列でフィルタリングする必要があります。ここで、ボットによって提供される約 300 の一般的なユーザー エージェントのリストを見つけることができます。すべての実用的な目的のために。
検索エンジンがページに到達することさえ望まない場合は、基本的なrobots.txtファイルを使用してそれらをブロックします。
あなたと同様の使用例がありますが、最近非常に役立つことがわかったオプションの 1 つは、 user-agent-string.info のUASParserクラスです。
これは、ユーザー エージェント文字列定義の最新セットを取得してローカルにキャッシュする PHP クラスです。クラスは、必要に応じて定義をプルするように構成できます。このように自動的に取得するということは、ボット ユーザー エージェントのさまざまな変更や、市場に出回っている新しい変更を把握しておく必要がないことを意味しますが、これを正確に行うために UAS.info に依存しています。
クラスが呼び出されると、現在の訪問者のユーザー エージェントを解析し、構成要素を分割した連想配列を返します。
Array
(
[typ] => browser
[ua_family] => Firefox
[ua_name] => Firefox 3.0.8
[ua_url] => http://www.mozilla.org/products/firefox/
[ua_company] => Mozilla Foundation
........
[os_company] => Microsoft Corporation.
[os_company_url] => http://www.microsoft.com/
[os_icon] => windowsxp.png
)
UA が人間の訪問者のものである可能性が高いと識別された場合、このフィールドtyp
は に設定されます。この場合、統計を更新できます。browser
ここでいくつかの注意事項:
ページ ビュー カウントを増やす前にユーザー エージェントを確認してください。ただし、これはなりすましの可能性があることに注意してください。PHP は$_SERVER['HTTP_USER_AGENT']
、Web サーバーがユーザー エージェントにこの情報を提供すると仮定して、ユーザー エージェントを に公開します。詳細について$_SERVER
は、http://www.php.net/manual/en/reserved.variables.server.phpを参照してください。
ユーザー エージェントのリストはhttp://www.user-agents.orgにあります。グーグルは、主要なプロバイダーに属するものの名前も提供します。3 番目に考えられるソースは、Web サーバーのアクセス ログを集計できる場合です。
ユーザーエージェント情報でそれらを識別しようとしましたか? 簡単な Google 検索で、Google などで使用されているユーザー エージェントが得られるはずです。
もちろん、これは絶対確実というわけではありませんが、大手企業のほとんどのクローラーは、個別のユーザー エージェントを提供しています。
編集:ボットのアクセスを制限したくないが、統計でその訪問をカウントしないと仮定します。
この機能は私には機能し、https ://www.cult-f.net/detect-crawlers-with-php/ Web サイトで見つけました。
<?php
$crawlers = array(
'Google'=>'Google',
'MSN' => 'msnbot',
'Rambler'=>'Rambler',
'Yahoo'=> 'Yahoo',
'AbachoBOT'=> 'AbachoBOT',
'accoona'=> 'Accoona',
'AcoiRobot'=> 'AcoiRobot',
'ASPSeek'=> 'ASPSeek',
'CrocCrawler'=> 'CrocCrawler',
'Dumbot'=> 'Dumbot',
'FAST-WebCrawler'=> 'FAST-WebCrawler',
'GeonaBot'=> 'GeonaBot',
'Gigabot'=> 'Gigabot',
'Lycos spider'=> 'Lycos',
'MSRBOT'=> 'MSRBOT',
'Altavista robot'=> 'Scooter',
'AltaVista robot'=> 'Altavista',
'ID-Search Bot'=> 'IDBot',
'eStyle Bot'=> 'eStyle',
'Scrubby robot'=> 'Scrubby',
);
function crawlerDetect($USER_AGENT)
{
// to get crawlers string used in function uncomment it
// it is better to save it in string than use implode every time
// global $crawlers
// $crawlers_agents = implode('|',$crawlers);
$crawlers_agents = 'Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby';
if ( strpos($crawlers_agents , $USER_AGENT) === false )
return false;
// crawler detected
// you can use it to return its name
/*
else {
return array_search($USER_AGENT, $crawlers);
}
*/
}
// example
$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
if ($crawler )
{
// it is crawler, it's name in $crawler variable
}
else
{
// usual visitor
}