如何为Web应用程序存储配置设置?

4
我有一些站点元数据需要更改...例如,在我的应用程序中,如果系统管理员不想使用网站的“库存”部分,他/她可以将其关闭,然后它将从主站点中消失。
所以我在想,也许我可以在数据库中创建一个名为“meta”的表,并在其中插入值(或元组)!然后,如果模块被关闭,脚本会更新行并将“模块x”设置为0,那么问题就解决了,对吧?
除了似乎需要太多开销(创建整个表并维护等等)来处理一系列值...基本上,我的解决方案就像是把方形钉子塞进圆形孔里。
浏览一下drupal数据库,没有发现任何东西,我猜他们在服务器上使用配置文件?如果是这样,我不知道如何通过Web应用程序读取.cfg文件中保存的值,也不知道这样的应用程序如何将信息保存到文件中。如果你之前处理过这个问题,我将非常感激你的见解。
顺便说一下,我主要使用PHP。
提前谢谢!

Drupal绝对是在数据库中执行此操作,否则升级和模块更新将变得非常痛苦,因为在复制模块等内容时可能会覆盖文件。在数据库中具有它的许多其他优点,但这实际上取决于您项目的规模是否值得。Drupal具有数百个模块,这是有道理的。 - cgp
4个回答

2

我经常看到这是通过使用配置数组来完成的:

$config["admin_email"] = "admin@mydomain.com";
$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. 选项

其中option可能是“excluded_modules”,相应的value将是“inventory,user_cat”。但说实话,这种方法有点笨拙,未来可能会给你带来一些困扰。


刚刚收到你最新的编辑……我一开始对表结构的想法完全是反着来的。拥有两列,选项和值,似乎更加合理,也应该更容易管理(正如下面的贡献者所提到的)。谢谢! - Julian H. Lam

2
我知道你的问题是“如何从网络应用程序读/写到服务器上的单独文件”,但我觉得有一个你所做出的假设并没有(太)大的问题。在DB中存储配置是完全可行的,我曾看到一些这样的项目(有高流量和良好的正常运行时间,并且有大量IT保持这种状态),它们将配置存储在数据库中,基本上就像你描述的那样。如果它只是一个表格,并且没有什么疯狂的故障转移/分区方案,那么它不会增加太多开销。
除了存储数据之外,数据库还有很多特性以及周围的许多基础设施。如果您使用DB来存储配置,您可以利用任何您拥有的数据库部署/备份机制,而几乎不需要额外的成本。 您还可以利用内置权限机制和任何可用的撤消功能。
然而,请注意,如果您在每个页面显示时都访问该配置,则可能会形成瓶颈。这完全取决于您的设计。 一种解决方案是,如果您有一个持久的Web服务,您可以让它每隔X秒重新扫描一次配置。

那是一个很好的观点,我想我已经被成功地说服了。 :) - Julian H. Lam

1

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

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


1

我更喜欢使用位于public_html文件夹之前的ini文件作为配置文件。我认为这样可以给我带来很多灵活性,可以将变量分组并在必要时为模块创建单独的ini文件等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接