0

我正在做一个人们可以上传文件的网站。文件可以是公共访问的,也可以是私人访问的。为了避免编码问题,我将具有随机名称的文件存储在“隐藏”目录中。但是,如果我们知道 url,则可以直接访问 public 文件夹。(这不是问题)。

我的公共部分没问题,我的 php 脚本给用户一个如下所示的 url:
http ://example.com/d/1/524dd711c3102/b1bi.png

和 apache 控制访问:

RewriteRule ^d/(\d+)/([a-zA-Z0-9]+)/(.+)$  ./files/public/$1/$2 [L]

到目前为止,一切都很好。

但现在,棘手的部分是私人文件。我需要只有上传文件的用户才能访问该文件。我想避免使用一些 readfile 或file_get_contents类似这样的东西的基于 PHP 的解决方案。

事实上,我会想象这样的事情:

用户尝试访问./files/private/< folder_id>/< file_id>和 Apache “询问” PHP 文件是否正常。

问题是,我不认为这是可能的。

所以 :

  1. 可能吗?如果是这样,如何?
  2. 你能想出更好的解决方案吗?(我想使用标准的 Apache/http 身份验证,但限制每个用户的访问会很棘手。

(我也可以使用 XSendFile,但我希望用户能够阅读/观看网站上的文件而无需下载(例如图片))

谢谢 :)

4

2 回答 2

2

mod_rewrite 里面有RewriteMap,可以使用外部数据源提供一些重写规则/映射。然而,性能可能非常糟糕。

检查:http ://httpd.apache.org/docs/current/rewrite/rewritemap.html#prg

于 2013-10-03T21:51:24.090 回答
1

您可以fread()结合垃圾收集器 ( http://php.net/gc ) 使用和读取/发送 1kb 的块到浏览器,这在内存中根本不是问题。

您只需fread()保存文件中的一个位置和文件的一部分。

这只会比 Apache 小一点,但你有完全的访问控制,这在所有情况下都是值得的。

其他网站将 BLOBS 中的大数据保存到数据库中,您甚至不会注意到。

于 2013-10-04T08:44:13.693 回答