2010-03-02 106 views
3

我有一个PHP网站,它可以根据用户输入在服务器上创建和存储HTML模板文件。一个用户可以创建很多模板。因此,要存储模板文件并将它们与数据库记录相关联,我所做的是 -如何组织使用php动态创建的文件?

“模板”是指持有有关模板,例如谁具有独特的自动递增ID创建它等,template_id

例如其他信息表 - 如果模板ID是1001 我将其转换为十六进制是03e9 现在我将十六进制数分成03 & e9(两个数字后)变成文件夹,e9变成 文件,其中有一些e xtension as“e9.tpl”

这是我如何从文件系统中找到模板,如果我知道模板ID。我不需要单独存储文件的路径。

这是一个好方法吗?这种方法有什么不足?还有其他方法比这更好吗?

将文件路径存储到数据库本身的优点/缺点是什么?例如为了使用不同的光盘服务模板等?

+0

现有的答案几乎涵盖了这一点,但要简单说明:*为什么要在生成文件名时存储文件名*?您存储的越少,数据越少可能不正确。 – 2010-03-03 05:22:17

回答

2

您是否这样做是因为您担心可能会耗尽目录中的文件条目/ inode?在ext3中,实际的限制是大约100.000个文件(和32.000个dirs)。

使用modulu可以更好地创建目录结构,如$dir = $id % 1000,然后将新模板放入该目录($dir/$id.tpl)中。该策略将创建最多1000个目录,因此您可以处理大约100.000.000个文件。

我看不到任何弄乱十六进制值或子字符串的原因。

0

我不明白将十六进制分成两部分以创建不同文件夹的重点......这可能会创建数百个和数百个不同的文件夹,这些文件夹将变成服务器上的一个完整混乱。为什么不把模板存储在一个单一文件夹中,文件名为十六进制值,如03e9.tpl

4

如果DB表中的ID已经是UNIQUE,为什么要转换文件系统的ID呢? 只需添加一个文件1001.tpl,你就完成了设置。如果您想将模板文件分类到文件夹中,请使用用户ID(我认为它也是UNIQUE),因此您可以获得文件夹124/1001.tpl。

根据您的部署过程,您需要将创建的文件保存在应用程序文件夹之外,以免在更新应用程序时意外删除它们。

1

如果您必须点击数据库才能获取id,那么您也可以将模板存储在其中。但是将它们存储在文件系统上没有任何错误。我一般会。

当你点击65536时,你会得到0x10000。确保你的代码可以处理。为了清楚起见,我更倾向于将0x1234存储为:1/1234.tpl。请注意,凭借顺序ID,您的文件夹将按顺序填满。

我可能不会将它们转换为十六进制。您可以使用模数运算符来确定将哪个文件夹放入其中。找出您可能拥有的文件数量并使用它来确定您想要的文件夹数量。

例如:

$path = ($id % NUMBER_OF_FOLDERS) . "/$id.tpl" 

其中$id是十进制的模板ID。