Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Apache使用PHP控制对文件/目录的访问_Php_Apache_Authentication - Fatal编程技术网

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

让Apache使用PHP控制对文件/目录的访问,php,apache,authentication,Php,Apache,Authentication,我正在做一个网站,人们可以上传文件。文件可以是公共访问,也可以是私有访问。为了避免编码问题,我将带有随机名称的文件存储在“隐藏”目录中。 但是,如果我们知道url,就可以直接访问公用文件夹。(这不是问题) 我的公共部分还可以,我的php脚本给用户一个如下所示的url: 和apache通过以下方式控制访问: RewriteRule ^d/(\d+)/([a-zA-Z0-9]+)/(.+)$ ./files/public/$1/$2 [L] 到目前为止,一切都很好 但现在,棘手的部分是私人文件

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

我的公共部分还可以,我的php脚本给用户一个如下所示的url:

和apache通过以下方式控制访问:

RewriteRule ^d/(\d+)/([a-zA-Z0-9]+)/(.+)$  ./files/public/$1/$2 [L]
到目前为止,一切都很好

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

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

用户尝试访问
/files/private//
和Apache“询问”PHP文件是否正常

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

所以:

  • 可能吗?如果是,怎么做?
  • 你能想出更好的解决办法吗?(我本想使用标准的Apache/http身份验证,但限制每个用户的访问权限会很棘手
  • (我也可以使用XSendFile,但我希望用户能够在不下载文件的情况下在网站上阅读/观看文件(例如图片))


    谢谢:)

    mod_rewrite中有
    RewriteMap
    ,它可以使用外部数据源提供一些重写规则/映射。然而,性能可能相当糟糕


    检查:

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

    检查:

    您可以使用
    fread()
    并将1kb的块与垃圾收集器()一起读取/发送到浏览器,这在内存中应该不会有任何问题

    使用
    fread()
    只保存文件中的一个位置和文件的一段

    这将只比Apache小一点点,但您拥有完全的访问控制,这是值得所有情况下使用的

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

    您可以使用
    fread()
    并结合垃圾收集器()将1kb的块读取/发送到浏览器中,这在内存中应该一点问题也没有

    使用
    fread()
    只保存文件中的一个位置和文件的一段

    这将只比Apache小一点点,但您拥有完全的访问控制,这是值得所有情况下使用的


    其他网站将大数据以blob形式保存到数据库中,你甚至不会注意到。

    如果允许用户访问文件,我认为你不能让Apache“询问”php。你如何验证你的用户?你说要避免的php是你应该采取的方法。为什么要避免它?@EtienMiret:“基本”PHP身份验证。登录表单查看DB@Dagon:因为它很慢而且很重。如果允许用户访问文件,我认为你不能让Apache“询问”php。你如何验证你的用户?你说你想要避免的php是你应该采取的方法。为什么要避免它?@EtienMiret:“基本”PHP身份验证。登录表单查看DB@Dagon:因为它又慢又重。