2010-02-03 74 views
3

我有一些网站元数据,我希望是可以改变的...例如,在我的应用程序中,如果系统管理员不想使用网站的“库存”部分,他/她可以关闭它,它会从主站点消失。如何存储Web应用程序的配置设置?

所以我在想,也许我可以在我的数据库中创建一个名为“meta”的表,并在其中插入值(或元组)。然后,如果一个模块关闭,脚本会更新行,并将“模块x”设置为0,我会完成它,对吧?

除了它看起来像一个可怕的很多开销(创建一个整个表,并维护它等),只是为了一组值...基本上,我的解决方案听起来像是将一个方形插入圆形插槽。

粗略浏览一下drupal数据库什么也没做,我猜他们在服务器上使用配置文件?如果是这样的话,我不清楚如何保存.cfg文件中的值(例如)可以被web应用程序读取,也不知道这样的应用程序如何将信息保存到文件中。如果您之前已经解决了这个问题,我会很感激您的洞察力。顺便说一下,我主要使用PHP。

在此先感谢!

+0

的Drupal绝对不会是在创建工作数据库,否则升级和模块更新将变得非常痛苦,因为当您在模块中复制文件时,文件可能会被覆盖。在数据库中使用它还有很多其他的好处,但是这取决于项目的规模,以及它是否值得。 Drupal有数百个模块,这是有道理的。 – cgp 2010-02-03 05:26:44

+0

+1,很好的问题:) – richsage 2010-02-03 10:13:54

回答

2

我经常看到这种使用配置阵列来实现:

$config["admin_email"] = "[email protected]"; 
$config["site_name"] = "Bob's Trinket Store"; 
$config["excluded_modules"] = array("inventory", "user_chat"); 

后来的后来,你可以检查:

if (!in_array("inventory", $config["excluded_modules"])) { 
    // include inventory logic 
} 

当然,这是一个有点倒退。实际上,明确声明包含模块会更明智,而不是负面的。然后,您将在项目中引用此config.php以加载并响应不同的配置。

您可以实现这个作为一个数据库表也做至少有两个领域:

  1. 选项
  2. 价值

option可能是“excluded_modules”及其相应的value会“库存,user_cat”。尽管如此,这种方法有点草率,并且可能会在未来造成一些挫折。

+0

刚刚得到最新的编辑...我最初是在思考我的表格模式。 有两个栏,选项和值,似乎是合乎逻辑的,应该是更容易管理(如下面的贡献者提到)。 谢谢! – 2010-02-03 05:21:04

1

基本上有两种选择 - 可以将它放在数据库表中,也可以放在平面配置文件(可能是PHP,也许是XML)中。对于后者,为了使其可以从一个页面进行编辑,您必须(1)处理混乱的操作系统特定的文件访问问题,(1)每次设置站点时应用适当的文件权限,以及(3)解析和生成PHP/XML代码。有了数据库,你所需要的只是一个简单的查询,所以我肯定会去做。

对于使用这种方法的大型项目,我知道phpBB确实将其大部分配置存储在数据库中(除了密码,上次我检查)。

2

我知道你的问题是“我如何从Web应用程序读取/写入服务器上的单独文件”,但我想我会解决你所做的一个假设。将配置存储在数据库中没有任何问题(错误)。

我见过的项目(有大量的流量,以及良好的运行时间 - 和一吨的IT维护它才行= P)在数据库中存储的配置,或多或少像你描述。如果它是单个表,并且你没有一个完整的疯狂的故障切换/分区方案,那么它并不是很大的开销。

数据库除了存储数据,还有许多基础设施,还有许多功能。如果您使用数据库进行配置,则可以使用您拥有的用于数据库部署/备份的任何机制,但几乎不需要额外的成本。您还可以利用内置权限机制以及任何可用的撤消功能。

编辑: 但是,如果您在每个页面显示中都访问该配置,那么您可能会遇到瓶颈:)所有关于您的设计。一种解决方案是,如果你有一个持久的Web服务,你可以让它每X秒重新扫描一次配置。

+0

这是一个很好的观点,我想我已经成功了。 :) – 2010-02-03 06:05:21

1

我喜欢用INI文件作为配置的public_html前坐folder.I认为给了我很大的灵活性和分组VAR并在必要时单独的ini的模块等

相关问题