以有效的方式将文件夹名称保存到数据库

时间:2012-09-15 19:41:38

标签: php indexing

我正在编写一个使用模块化结构的PHP应用程序。模块基本上是文件夹名称,这些文件夹包含PHP文件。

它看起来像这样:

/modules
   /module1
   /module2
   /module3

我的PHP应用程序读取modules文件夹的内容,并将文件夹名称保存到我的数据库中的表中。我的modules表看起来像这样:

id | module  | active | order
1  | module1 | 1      | 2
2  | module2 | 0      | 1
3  | module3 | 1      | 3

在读取modules文件夹并将文件夹名称保存到数据库之后,我再次从表中获取行。这样我就可以很容易地看到哪些模块是活动的,以及我必须以哪种顺序显示它们。

这种方法的问题在于,每次访问页面时我都必须完成上述所有操作。因为系统不知道何时在module文件夹中添加或删除了module。因此,通过“读取文件夹/将其保存到DB /并再次读取数据库”似乎可以提供最新版本。但我可以想象这种方法效率低下。我认为这可以做得更好。


我想出了一个解决方案。但我仍然认为这不是最佳解决方案。

解决方案1 ​​

当用户访问该网站时,请执行以上所有操作。阅读modules文件夹,将文件夹名称保存到表中(先清除表格后),然后从表格中获取行并将其存储在session中。当用户浏览网站时,我可以简单地遍历session

缺点:删除/添加的模块仅在浏览器关闭并重新打开时可见。

改进?

我确信有更优雅的方式来做到这一点。任何想法?

1 个答案:

答案 0 :(得分:3)

流程应如下:

  1. 管理员请求模块列表
  2. 脚本扫描知名目录并构建可用模块列表
  3. 该脚本从数据库中读取活动模块的加载顺序
  4. 相同的脚本会显示一个列表,以便管理员有机会激活模块并定义订单
  5. 最后,一段代码将更改提交给数据库,如果有的话
  6. 普通用户请求页面时

    1. 模块子系统从数据库中读取模块名称和顺序
    2. 模块系统根据db中存储的名称,按照db
    3. 中定义的顺序从众所周知的目录中加载模块

      我认为这是最有效的方式。

      免责声明:恕我直言,这是浪费时间。你最好学习一个真正的框架,也许是像CakePHP这样的MVC,或者像Drupal,Joomla或Wordpress这样广泛使用的CMS之一。通过这种方式,您将拥有1. 正常工作系统2. 安全系统3.可重复使用的知识。即使是出于学习目的,也无需重新发明轮子。你最终会通过学习其他人的成功(和失败)来加快这个过程。