繁体   English   中英

使Apache使用PHP来控制对文件/目录的访问

[英]Make Apache use PHP to control access to files / directories

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

我的公共部分没问题,我的php脚本为用户提供了一个类似于以下内容的网址:
http://example.com/d/1/524dd711c3102/b1bi.png

并使用以下命令控制访问:

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,但我希望用户无需下载即可阅读/观看网站上的文件(例如图片))

谢谢 :)

mod_rewrite中有RewriteMap ,它可以使用外部数据源提供一些重写规则/映射。 但是,性能可能会非常糟糕。

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

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

使用fread()只能在文件中保存位置和文件的一部分。

这将仅比Apache小一点,但是您具有完全的访问控制,这在所有情况下都是值得的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM