PHPでボットがファイルダウンロードカウンターをインクリメントしないようにするにはどうすればよいですか?
質問
ユーザーがWebサイト上のファイルをダウンロードするためのリンクをクリックすると、このPHPファイルにアクセスしますは、そのファイルのダウンロードカウンターをインクリメントし、header()-実際のファイルにリダイレクトします。ただし、ボットはダウンロードリンクをたどっていると思われるため、ダウンロード数は不正確です。
- リンクをたどるべきではないことをボットに知らせるにはどうすればよいですか
- ほとんどのボットを検出する方法はありますか?
- ファイルのダウンロード数をカウントするより良い方法はありますか?
解決
robots.txt: http://www.robotstxt.org/robotstxt.html
すべてのボットがそれを尊重するわけではありませんが、ほとんどのボットはそれを尊重します。ボット経由のアクセスを本当に防止したい場合は、ボットへのリンクをGETではなくPOSTにしてください。ボットはPOST URLをフォローしません。 (つまり、問題のURLに移動するサイトにポストバックする小さなフォームを使用します。)
他のヒント
Godekeのrobots.txtの回答で十分だと思います。ボットを絶対にカウンターに配置できない場合は、一般的なロボットユーザーエージェント。
どちらの方法も完璧ではありませんが、2つの混合はおそらくもう少し厳密です。私なら、おそらくロボットファイルに固執するでしょう。なぜなら、それは簡単で、おそらく最も効果的な解決策だからです。
Godekeは正しい、robots.txtはボットのダウンロードを防ぐために最初に行うことです。
カウントに関しては、これは実際にWeb分析の問題です。 wwwアクセスログを保持して、 Webalizer や AWStats (またはWebtrendsやUrchinなどの派手な代替手段)私にとって、これはこの種の情報を収集する方法です。なぜなら、それは簡単で、ユーザーがファイルをダウンロードするときにPHP、リダイレクト、またはその他のパフォーマンスヒットがないからです。とにかく保持しているApacheログを使用しているだけです。 (また、 grep -c
を使用すると、特定のファイルまたはワイルドカードパターンでの「n」ダーティカウントがすばやく得られます。)
ボット、または特定のユーザーエージェントやその他の基準によるヒットを無視するように統計ソフトウェアを設定できます(基準を後で変更する場合は、古いログデータを再処理するだけです)。もちろん、これにはすべての古いログが必要です。したがって、 logrotate
のようなものでログを投げた場合、履歴データなしで開始する必要があります。