2008-10-24 5 views
11

Wenn ein Benutzer auf einen Link klickt, um eine Datei auf meiner Website herunterzuladen, gehen sie zu this PHP file, die einen Download-Zähler für diese Datei erhöht und dann header() - leitet sie an die tatsächliche Datei um. Ich vermute, dass Bots dem Download-Link folgen, aber die Anzahl der Downloads ist ungenau.Wie kann ich verhindern, dass Bots meinen Datei-Download-Zähler in PHP inkrementieren?

  • Wie kann ich Bots wissen lassen, dass sie dem Link nicht folgen sollten?
  • Gibt es eine Möglichkeit, die meisten Bots zu erkennen?
  • Gibt es eine bessere Möglichkeit, die Anzahl der Downloads einer Datei zu zählen?
+0

Sie müssen ein Browser-Erkennungsskript mit einer aktuellen Benutzeragenten-Datenbank verwenden. Hier ist [eins] (http://chrissschuld.com/projects/browser-php-detecting-a-users-browser-from-php/#typicalusage). –

Antwort

16

robots.txt: http://www.robotstxt.org/robotstxt.html

Nicht alle Bots respektieren, aber die meisten tun. Wenn Sie wirklich den Zugriff über Bots verhindern wollen, machen Sie den Link zu einem POST statt zu GET. Bots folgen nicht den POST-URLs. (I.E., verwenden Sie ein kleines Formular, das zurück auf die Website sendet, die Sie zu der betreffenden URL bringt.)

4

Ich würde denken, Godekes robots.txt-Antwort würde ausreichen. Wenn Sie absolut nicht die Bots auf Ihrem Counter haben können, dann würde ich empfehlen, die Robots-Datei in Verbindung mit nicht inkrementellen Klicks mit einigen common robot user agents zu verwenden.

Kein Weg ist perfekt., Aber die Mischung der beiden ist wahrscheinlich ein wenig strenger. Wenn ich das wäre, würde ich wahrscheinlich nur bei der Roboterdatei bleiben, da es einfach und wahrscheinlich die effektivste Lösung ist.

3

Godeke hat Recht, robots.txt ist das erste, was zu tun ist, um die Bots vom Herunterladen abzuhalten.

In Bezug auf die Zählung ist dies wirklich ein Web-Analyse-Problem. Behalten Sie Ihre www Zugriffsprotokolle nicht bei und führen Sie sie durch ein Analyseprogramm wie Webalizer oder AWStats (oder ausgefallene Alternativen wie Webtrends oder Urchin)? Für mich ist das der Weg, diese Art von Informationen zu sammeln, weil es einfach ist und es keine PHP-, Redirect- oder andere Leistungseinbußen gibt, wenn der Benutzer die Datei herunterlädt. Sie verwenden nur die Apache-Protokolle, die Sie trotzdem behalten. (Und grep -c geben Ihnen die schnelle ‚n‘ schmutzige Zahl auf eine bestimmte Datei oder Wildcard-Muster.)

Sie können Ihre Statistiken Software konfigurieren Hits von Bots oder bestimmte Benutzeragenten und anderen Kriterien zu ignorieren (und wenn Sie ändern Ihre Kriterien später, verarbeiten Sie nur die alten Protokolldaten neu). Natürlich erfordert dies, dass Sie alle Ihre alten Protokolle haben, also wenn Sie sie mit etwas wie logrotate geworfen haben, müssen Sie ohne irgendwelche historischen Daten anfangen.

Verwandte Themen