我的应用程序的一般结构:
[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才能在那里导航。
为了最佳实践,您对此有何看法?
在同级目录中。也就是说,与includes/
和public/
处于同一级别的目录。
这取决于您要实现的目标。如果您要上传用户文章的示例照片,请将它们放在公开可见的文件夹中,例如/public/images
(无论哪种方式,图像都是可见的)。另一方面,如果您正在制作一个(例如)从上传文件中获利的应用程序,最好将它们放在更高的一级,例如 /uploads
,这样它们就不会被公开访问,但您可以创建一个代码来启用下载。
我想只有那个用户。我的意思是,没有将"共享"媒体纳入对话......这是未来的可能性。
在这种情况下,通常的设置是
-
将文件放在 Web 根目录之外(即放在
public
文件夹之外 - 确切的位置,真的取决于你) -
构建一个 PHP 脚本,该脚本检查用户权限并在所有内容都签出时传递请求的文件。然后,将为每个资源调用该 PHP 脚本,如下所示:
domain.com/resource.php?user=user123&file=mypic.jpg
(或使用漂亮的URL重写)
但是请记住,这需要为每个请求的资源启动一个昂贵的 PHP 进程。请务必使用非常巧妙的缓存来最大程度地减少请求。
有Apache和nginx模块可以使这个过程更有效,命名为X-Sendfile。这可能值得一看。