我现在在我的服务器上有直接指向文件的下载链接。我有一套非常复杂的重写规则,但它们不会影响我的要求。
我想要做的是计算下载次数。我知道我可以编写一个PHP脚本来回显内容并使用重写规则,以便PHP脚本处理所有下载。
然而,我担心有几点:
/etc/passwd
,../../index.php
)可能不会被阻止HTTP 404 Not Found
响应(和其他人)我更喜欢让Apache处理它们(我有一个依赖于服务器重定向变量的错误处理程序脚本)HTTP 304 Unmodified
响应,因此浏览器缓存将无用,重新下载会消耗额外的带宽所以,我想找一些其他方法来执行统计。例如,当请求和下载某些文件(在某些目录中)时,我可以使Apache触发脚本吗?
答案 0 :(得分:0)
您可以解析Apache日志文件。
答案 1 :(得分:0)
Apaches mod_lua可能是将自己的代码挂钩到apache内的请求处理中的最通用,最灵活和最有效的方法。通常,您为提供最直接方法的任务选择该语言。而lua在使用c / c ++时比其他任何东西都要好得多。
然而,当然还有其他策略,所以要有创意。我立即想到了两件事:
如果您使用某种类似unix的系统,可以使用PAM:配置某种虚拟身份验证要求并设置PAM进行处理。在PAM配置中,您可以做任何您喜欢的事情。优点:您可以获得请求,并可以过滤自己的重点和不重要的内容。您必须确保PAM响应不会创建有效的会话,这样您才能真正得到客户端所做的每个请求,而不仅仅是第一个请求。
还有其他apache模块可以进行请求处理。请查看forensic module或external filter module。两者都允许将外部逻辑挂钩到请求处理中。您将需要为此配置基于cli的php。
答案 2 :(得分:0)
这可能不是您想要的,但本着使用正确的工具来完成工作的精神,您可以轻松使用Google Analytics(或可能是任何其他分析包)来跟踪这一情况。看看https://support.google.com/analytics/bin/answer.py?hl=en-GB&answer=1136922。
编辑:
它需要能够修改您网站的vhost设置,但您可以为下载创建单独的apache日志文件。假设您有一个下载文件夹来存储可供下载的文件,您可以将这样的内容添加到您的vhost中:
SetEnvIf Request_URI "^/downloads/.+$" download
LogFormat "%U" download-log
CustomLog download-tracking.log download-log env=download
现在,只要从/ downloads /文件夹中请求某些内容,它就会记录在download-tracking.log文件中。
要了解的一些事项:
这种方法的主要好处是它不需要任何编码,只需简单的配置更改就可以了。当然,缺点是您必须进行某种日志处理。这取决于对你最重要的事情。
另一种选择是使用PHP脚本和readfile函数。这使得将请求记录到数据库变得更加容易,但它确实附带了您之前提到的其他问题。
有很多方法可以将Apache日志传递给MySQL,但是从我看到它可能会很棘手。根据你正在做的事情,这可能是值得的努力......但是,它可能不会。