2012-01-31 90 views
1

我有一个脚本为每个在文件夹/files中访问的文件执行的CMS。使用PHP下载文件,跟踪,授权,缓存,MIME类型

我设置这个了一个在/files/.htaccess

RewriteRule ^(.*) ../file_tracker?path=/$1

有两件事情RewriteRulefile_tracker.php脚本应该做的:

  • 跟踪:保留日志多少次一个文件被访问,最后一次被访问。
  • 授权:例如/files/secure中的文件需要登录会话。

当你有这样一个脚本,你需要做更多的工作,如:

  • 返回如果文件不存在404个状态码 - 需要file_exists检查
  • 输出正确的MIME类型头文件 - 如果允许任何文件类型被提供,这是PHP中的恶梦
  • 输出合理的缓存头文件 - 自定义电子标签?

我想,因为有些页面有很多文件的这个脚本是尽可能快,100ms的开销已经太多了。现在我正在考虑一个简单的日志来进行跟踪,一个计划任务将执行批量更新。授权将更加资源密集,但我想我无法避免这种情况。最后一部分我希望Apache能够做到,因为它看起来非常擅长:正确的标题,用于缓存的电子标签以及所有的幻想。

我很确定我不能成为这个问题唯一的问题。有什么建议么?


UPD:我没有代码来显示,因为没有相关的代码。我可以实现的事情是如此微不足道,甚至不值得发布。这是一个先进的话题。 '使用header()'不是我正在寻找的那种建议。


将是完美的解决方案,但它不是在默认情况下大多数主机启用,所以我不能依赖它。

+1

这是一个相对简单的任务,你需要自己写一下,如果遇到困难,可以提出具体问题。头文件都是关于['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

+1

当您考虑到大多数文件需要花费很多时间才能下载时,100毫秒的处理开销是没有意义的。 50,000ms的下载时间为100ms = 0.2%的开销。 – 2012-01-31 15:48:19

+1

当你使用'X-Sendfile时:'Apache应该处理实际的文件下载以及头文件。 (在PHP用户空间中正确处理字节范围或条件http请求有点费力) – mario 2012-01-31 15:56:48

回答

0

我想这只是归结为访问PHP中的日志记录。授权是一个不同的问题。我会解决这个问题,并创建一个新的问题。