0

我创建了一个网站,用户可以在上面上传不同的文件,以后可以通过他们的个人资料访问这些文件。随着时间的推移,我意识到这种为用户创建文件夹和子文件夹的方法非常麻烦,因为随着更多用户加入和使用我的网站,它会创建如此多的文件夹和子文件夹。我现在正在考虑为所有文件设置一个文件夹,但将用户的文件即时重命名为USERID-FILENAME.

当我想向他们的特定用户显示文件时,问题就来了;我想搜索文件夹中的文件,然后抓取以特定用户 ID 开头的文件,例如,如果它的用户 id 为 200,我想抓取所有在第一个连字符之前有 200 的文件并显示它们。

我怎样才能做到这一点,这是最好的使用方法吗?

4

2 回答 2

0

对于这项工作,您可能需要更像数据库或键值存储的东西,而不是文件系统,因为/如果您的网站显着增长,文件系统将无法很好地扩展。

例如,您可以将类似的东西<userid>-<filename>用作键值存储中的键,将文件的内容设置为值,编码为二进制 blob。

最重要的是,您可能需要一个描述符来跟踪用户曾经上传的所有文件,可能直接由用户 ID 或类似的东西键入,<userid>-files

然后,当您查找用户时,您<userid>-files首先加载他们的描述符,使用它来显示他们访问/控制/拥有的文件列表,然后<userid>-<filename>在他们请求特定文件时查找。

再考虑一下,这可能不足以处理用户多次上传同一文件的情况——您可能希望为文件本身分配 ID,并将这些 ID 保留在<userid>-filesblob 中。这具有额外的优势,即用于存储文件的架构与用户无关,因此您可以开始扩展您的服务以实现共享功能(可能还有另一块描述共享/访问控制属性的数据)。

于 2013-06-25T21:06:49.270 回答
0

可能是这样的:

foreach (glob( ((int)'$userid')'-*') as $file) {
    process($file);
}
于 2013-06-25T21:01:02.343 回答