Slim PHP:从非公共目录下载文件

问题描述 投票:0回答:1

我有一个 Slim 4 应用程序,该应用程序的站点位于公共文件夹中。此外,还有其他目录(如应用程序、视图等),包括一个名为 uploads 的目录,我在其中保存用户提交的文件。

我们想要一个链接文件的页面。用户单击文件链接,就会立即下载。问题是上传文件夹被视为公共路由的一部分。

在我的控制器中我有这个:

$location = __DIR__ . "/../../uploads/" . $filename;

在我看来,我:

<p><a href="{{location}}" download>{{library.uploads}}</a></p>

如果位置为 /home/user/public_html/project/folder1/folder2/uploads,则该位置将被视为 sitename.com/home/user/public_html/project/folder1/folder2/uploads

如何从上传文件夹下载文件?

php slim
1个回答
0
投票

您将

/home/user/public_html/project/folder1/folder2/uploads
C:\Windows\System32
(用于访问计算机磁盘中的文件)等文件系统路径与
https://example.com/project/folder1/folder2/uploads
https://example.com/?id=31416
(用于通过 HTTP 客户端访问网络资源)等 URL 混淆了。它们是不同的东西,就像您的社会安全号码与护照号码不同一样,即使两者都是政府颁发的字母数字字符串。

除非您计划每次都将代码部署在完全不同的位置,否则 URL 不需要是动态的:

$location = "/project/folder1/folder2/uploads/$filename";

顺便说一句,请确保您的托管帐户不会将整个 Slim 框架目录暴露到互联网上。您应该将几乎所有内容(从

vendor
到 PHP 代码)都放在 Web 服务器根目录之外的目录中,并且只有一个文件夹(典型名称为
public
,但它可以具有您想要的任何名称)以及路由脚本和所有内容资产(CSS、JavaScript、图像...)。

© www.soinside.com 2019 - 2024. All rights reserved.