使用 slim 和 php 访问根目录外的文件

Accessing files outside directory root with slim and php

目前我的文件结构如下:

├── README.md
├── app
├── classes
├── composer.json
├── composer.lock
├── database
├── public
├── templates
├── users
└── vendor

users 文件夹中,我有一些与登录用户的用户名相关的文件夹,每个文件夹都有自己的文件和用户定义的文件夹。

我遇到的问题是我无法下载 users 目录中的文件。目前,我通过将 users 目录移动到 public 目录来让我的代码正常工作,但是这存在非常明显的安全漏洞。我如何做到这一点,以便我的用户目录比根目录高一级,如此处所示,但仍然可以通过 public 目录访问?

我已经尝试使用 RewriteRule users/ ../users/ 但它似乎不起作用。我可以通过 PHP 访问 users 目录,只是不能访问 public 文件夹中的前端控制器。

这是我第一个使用 Slim 的 "real" 项目,所以我对这整个 front-controller/mvc 类型的东西还很陌生。任何帮助都会很棒,谢谢!

在您的路由逻辑或控制器中,您需要验证用户有权访问所述文件,然后很可能使用 PHP 来提供该文件,因为它无法在 Web 路径中访问。

在 PHP 中,您可以设置正确的 HTTP headers 并使用 readfile() 为最终用户提供文件。

http://php.net/manual/en/function.readfile.php