3

我的应用程序的一般结构:

[includes] - not accessible by the web
.. important database classes, etc
[public]
.. all files that the application publicly uses

我正在尝试决定应该将[uploads]文件夹存储在哪里。这是所有用户将存储他们的媒体(图像等)的地方

[uploads]
   [user123]
      mypic.jpg
      mysecondpic.jpg
   [user456]
      picpic.jpg
      yeah.jpg

目前,我在文件夹中有这个文件[public]夹,但由于某种原因,我不相信这是正确的地方......

[includes]公众将无法访问该文件夹,只有 PHP 可以在那里导航。

为了最佳实践,您对此有何看法?

4

3 回答 3

2

在同级目录中。即与includes/和处于同一级别的目录public/

于 2012-07-03T00:29:48.387 回答
0

这取决于您要达到的目标。如果您要上传例如用户文章的照片,请将它们放在公开可见的文件夹中,例如/public/images(无论哪种方式,图像都是可见的)。另一方面,如果您正在制作一个将(例如)从上传文件中获利的应用程序,最好将它们放在更高的级别,例如/uploads,这样它们就不会被公开访问,但是您可以创建一个代码将启用下载。

于 2012-07-03T00:34:59.687 回答
0

我想只有那个用户。我的意思是,没有将“共享”媒体带入对话......这是一种可能性。

在这种情况下,通常的设置是

  • 将文件放在 Web 根目录之外(即在public文件夹之外 - 具体位置取决于您)

  • 构建一个 PHP 脚本来检查用户权限并在所有检查都通过时传递请求的文件。然后将为每个资源调用该 PHP 脚本,如下所示:

    domain.com/resource.php?user=user123&file=mypic.jpg

    (或使用漂亮的 URL 重写)

但是请记住,这需要为每个请求的资源启动一个昂贵的 PHP 进程。一定要使用非常聪明的缓存来最小化请求。

有 Apache 和 nginx 模块可以使这个过程更高效,命名为X-Sendfile。这可能值得一看。

于 2012-07-03T00:38:06.983 回答