了解文件是否已下载

了解文件是否已下载

这个问题困扰了我很久。如果我的 documentroot (public_html) 中有一些文件可供下载,并且我将下载链接提供给某人下载该文件 - 我该如何验证它是否已被下载?它是运行 Apache-2.2.27 的 cPanel 服务器。如果它是一个 FTP 帐户,我可以查看 /var/log/messages。

/etc/httpd/logs/access_logs 是好的起点吗?或者我遗漏了其他明确的位置。

附言:直到现在,我还是习惯问他们:)

答案1

您只需检查访问日志中是否有对文件的请求,并得到 200 个响应。

虽然它不会告诉您他们是否下载了该文件、是否取消了该文件等......但它至少会告诉您他们对该文件提出了请求。

您甚至可以创建一个纯粹用于文件访问的单独日志文件,例如:

SetEnvIf Request_URI "\.(zip|exe|msi|tar|gz)$" file_dl
CustomLog logs/file_downloads.log common env=file_dl

如果你想知道你发送了多少字节,那么你需要加载mod_logio模块

然后你可以像这样设置你的日志:

LogFormat "%h %l %u %t \"%r\" %>s %b" file_bytes

SetEnvIf Request_URI "\.(zip|exe|msi|tar|gz)$" file_dl
CustomLog logs/file_downloads.log file_bytes env=file_dl

相关文件:

答案2

如果您向人们提供下载链接,但又不想将其永久留在您的网络服务器上,那么一个更容易遵循的策略是告诉人们该链接将在 x 天之内有效,然后删除该文件。

请参阅 ServerFault QA使文件夹中的文件过期:在 x 天后删除文件了解如何实现脚本。该脚本是 powershell,但重写为 bash/perl/php/whatever 脚本应该不难。基本上,它相当于制定一项策略,每次将添加的文件放入新文件夹中,然后每天脚本检查创建日期早于 x 天的文件夹并删除整个文件夹及其内容。

否则,我相信 VasiliSyrakis 已经回答了实际问题。

相关内容