如何阻止机器人在 PHP 中增加我的文件下载计数器?

Posted

技术标签:

【中文标题】如何阻止机器人在 PHP 中增加我的文件下载计数器?【英文标题】:How do I stop bots from incrementing my file download counter in PHP? 【发布时间】:2010-09-19 03:09:14 【问题描述】:

当用户单击链接以下载我网站上的文件时,他们会转到 this php file,这会增加该文件的下载计数器,然后 header() 将它们重定向到实际文件。但是,我怀疑机器人正在跟踪下载链接,因此下载次数不准确。

如何让机器人知道他们不应该点击链接? 有没有办法检测大多数机器人? 有没有更好的方法来计算文件的下载次数?

【问题讨论】:

您必须使用带有最新用户代理数据库的浏览器检测脚本。这里是one。 【参考方案1】:

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

并非所有机器人都尊重它,但大多数都尊重它。如果您真的想阻止通过机器人进行访问,请将指向它的链接设为 POST 而不是 GET。机器人不会遵循 POST 网址。 (即,使用一个小表单回发到将您带到相关 URL 的站点。)

【讨论】:

【参考方案2】:

我认为 Godeke 的 robots.txt 答案就足够了。如果您绝对不能让机器人成为您的计数器,那么我建议您将机器人文件与不增加点击次数的 common robot user agents 结合使用。

这两种方式都不是完美的。但两者的混合可能会更严格一些。如果是我,我可能会坚持使用 robots 文件,因为它很容易并且可能是最有效的解决方案。

【讨论】:

【参考方案3】:

Godeke 是对的,robots.txt 是防止机器人下载的第一件事。

关于计数,这确实是一个网络分析问题。您是否没有保留您的 www 访问日志并通过像 Webalizer 或 AWStats (或像 Webtrends 或 Urchin 这样的花哨替代品)这样的分析程序运行它们?对我来说,这是收集此类信息的方法,因为它很简单,并且在用户下载文件时没有 PHP、重定向或其他性能损失。您只是在使用您保留的 Apache 日志。 (grep -c 会为您提供特定文件或通配符模式的快速“n”脏计数。)

您可以将统计软件配置为忽略机器人或特定用户代理和其他标准的点击(如果您稍后更改标准,您只需重新处理旧的日志数据)。当然,这确实需要您拥有所有旧日志,因此,如果您一直使用 logrotate 之类的东西折腾它们,您将不得不在没有任何历史数据的情况下开始。

【讨论】:

【参考方案4】:

您还可以使用http://www.bad-behavior.ioerror.us/ 检测不尊重 robots.txt 的恶意机器人。

【讨论】:

以上是关于如何阻止机器人在 PHP 中增加我的文件下载计数器?的主要内容,如果未能解决你的问题,请参考以下文章

php如何防止网站内容被采集

如何使用PHP计算一个特定页面的真实访客数 [关闭]。

如何阻止 Visual C++ 在 MFC .rc 文件生成中使用本地机器区域设置?

如何用php识别机器人?

如何在 phpMyAdmin 中增加导入大小限制

如何在Stripe PHP和webhook中使用好事件,比较收到的付款数量并取消订阅