使用PHP下载文件,跟踪,授权,缓存,MIME类型
问题描述:
我有一个脚本为每个在文件夹/files
中访问的文件执行的CMS。使用PHP下载文件,跟踪,授权,缓存,MIME类型
我设置这个了一个在/files/.htaccess
RewriteRule ^(.*) ../file_tracker?path=/$1
有两件事情RewriteRule
的file_tracker.php
脚本应该做的:
- 跟踪:保留日志多少次一个文件被访问,最后一次被访问。
-
授权:例如
/files/secure
中的文件需要登录会话。
当你有这样一个脚本,你需要做更多的工作,如:
- 返回如果文件不存在404个状态码 - 需要
file_exists
检查 - 输出正确的MIME类型头文件 - 如果允许任何文件类型被提供,这是PHP中的恶梦
- 输出合理的缓存头文件 - 自定义电子标签?
我想,因为有些页面有很多文件的这个脚本是尽可能快,100ms的开销已经太多了。现在我正在考虑一个简单的日志来进行跟踪,一个计划任务将执行批量更新。授权将更加资源密集,但我想我无法避免这种情况。最后一部分我希望Apache能够做到,因为它看起来非常擅长:正确的标题,用于缓存的电子标签以及所有的幻想。
我很确定我不能成为这个问题唯一的问题。有什么建议么?
UPD:我没有代码来显示,因为没有相关的代码。我可以实现的事情是如此微不足道,甚至不值得发布。这是一个先进的话题。 '使用header()
'不是我正在寻找的那种建议。
将是完美的解决方案,但它不是在默认情况下大多数主机启用,所以我不能依赖它。
答
我想这只是归结为访问PHP中的日志记录。授权是一个不同的问题。我会解决这个问题,并创建一个新的问题。
这是一个相对简单的任务,你需要自己写一下,如果遇到困难,可以提出具体问题。头文件都是关于['header()'](http://php.net/manual/en/function.header.php)的函数,并且需要一个正确的MIME类型,你需要一个MIME类型的查找表 - > file扩展关系。如果可用['finfo_file()'](http://php.net/manual/en/function.finfo-file.php)可以帮助解决这个问题。 – DaveRandom 2012-01-31 15:44:23
当您考虑到大多数文件需要花费很多时间才能下载时,100毫秒的处理开销是没有意义的。 50,000ms的下载时间为100ms = 0.2%的开销。 – 2012-01-31 15:48:19
当你使用'X-Sendfile时:'Apache应该处理实际的文件下载以及头文件。 (在PHP用户空间中正确处理字节范围或条件http请求有点费力) – mario 2012-01-31 15:56:48