Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何存储web应用的配置设置?_Php_Metadata_Config - Fatal编程技术网

Php 如何存储web应用的配置设置?

Php 如何存储web应用的配置设置?,php,metadata,config,Php,Metadata,Config,我有一些网站元数据我想是可变的。。。例如,在我的应用程序中,如果系统管理员不想使用站点的“清单”部分,他/她可以将其关闭,并且它将从主站点中消失 所以我在想,也许我可以在我的数据库中创建一个名为“meta”的表,并在其中插入值(或元组)!然后,如果某个模块被关闭,脚本将更新该行,并将“module x”设置为0,那么我就可以处理它了,对吗 除了对于一组值来说,这似乎是非常大的开销(创建一个完整的表,并维护它,等等)。。。基本上,我的解决方案听起来像是把一个方形的钉子塞进一个圆形的槽里 粗略地浏览

我有一些网站元数据我想是可变的。。。例如,在我的应用程序中,如果系统管理员不想使用站点的“清单”部分,他/她可以将其关闭,并且它将从主站点中消失

所以我在想,也许我可以在我的数据库中创建一个名为“meta”的表,并在其中插入值(或元组)!然后,如果某个模块被关闭,脚本将更新该行,并将“module x”设置为0,那么我就可以处理它了,对吗

除了对于一组值来说,这似乎是非常大的开销(创建一个完整的表,并维护它,等等)。。。基本上,我的解决方案听起来像是把一个方形的钉子塞进一个圆形的槽里

粗略地浏览一下drupal数据库,什么结果都没有,我猜他们使用的是服务器本身的配置文件?如果是这种情况,我不知道web应用程序如何读取.cfg文件(例如)中保存的值,也不知道这样的应用程序如何将信息保存到文件中。如果你以前解决过这个问题,我会很感激你的洞察力

顺便说一下,我主要使用PHP


提前谢谢

我经常看到使用配置数组实现这一点:

$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
,以加载并响应不同的配置

您也可以将其实现为数据库表,至少创建两个字段:

  • 选择权
  • 价值观

  • 其中,
    选项
    可能是“排除的模块”,其相应的
    将是“库存,用户类别”。不过,老实说,这种方法有点草率,将来可能会给您带来一些挫折。

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

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

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

    我见过一些项目(流量大,正常运行时间长,而且很多项目都是这样运行的=p)将配置存储在数据库中,或多或少如您所述。如果它是一个表,并且您没有一个完整的疯狂的故障转移/分区方案,那么它实际上没有那么多开销

    数据库除了存储数据外,还有很多功能,以及它周围的许多基础设施。如果您在配置中使用DB,那么您就可以使用任何用于DB部署/备份的机制,而只需很少的额外成本。您还可以利用内置的权限机制和任何可用的撤消功能

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

    我更喜欢使用ini文件作为位于公用html文件夹之前的配置。我认为这给了我很大的灵活性和分组变量,并在必要时为模块等创建单独的ini。

    刚刚得到你的最新编辑。。。最初,我完全是从表模式的角度来考虑的。有两个列,选项和值,看起来合乎逻辑,应该更容易管理(就像下面提到的贡献者)。谢谢Drupal绝对是在数据库中完成的,否则升级和模块更新会变得很痛苦,因为当您在模块中复制文件时,文件可能会被覆盖。在数据库中使用它还有很多其他的好处,但这实际上取决于项目的规模,以及它是否值得。Drupal拥有数百个模块,这很有意义。这是一个很好的观点,我想我已经成功地受到了影响