两个php的build文件,在PHP中创build一个configuration文件

我对这里所接受的答案感到惊讶,并且已经获得了许多赞扬。 除了Marcio Mazzucato的回答之外,没有讨论任何多种方法的相对优点/缺点。

我看到的选项是:

基于文件的机制

这些要求你的代码在特定的位置查找ini文件。 这是一个难以解决的问题,并且总是在大型PHP应用程序中出现。 但是,您可能需要解决这个问题,以便find在运行时被合并/重用的PHP代码。

常见的做法是始终使用相对目录,或从当前目录向上search,以查找在应用程序的基本目录中专门命名的文件。

用于configuration文件的常用文件格式是PHP代码,ini格式文件,JSON,XML,YAML和序列化的PHP

PHP代码

这为表示不同的数据结构提供了巨大的灵活性,并且(假设它是通过include或require处理的)parsing后的代码将从操作码caching中获得,从而带来性能上的好处。

include_path提供了一种抽象文件的潜在位置而不依赖于附加代码的方法。

另一方面,从代码分离configuration的主要原因之一是分离责任。 它提供了一个将附加代码注入运行时的path。

如果configuration是通过工具创build的,可以validation工具中的数据,但是没有标准函数来转义数据以embedded到PHP代码中,如HTML,URL,MySQL语句,shell命令所示。 。

序列化数据这对于less量configuration(最多约200项)相对有效,并允许使用任何PHP数据结构。 它只需要很less的代码来创build/parsing数据文件(所以你可以花费你的努力来确保文件只是用适当的授权书写)。

转义写入文件的内容是自动处理的。

由于您可以序列化对象,因此仅通过读取configuration文件(__wakeup魔术方法)就可以创build调用代码的机会。

结构化文件

按照Marcel或JSON或XML的build议将其存储为INI文件还提供了一个简单的API来将文件映射到PHP数据结构(除XML之外,用于转义数据和创build文件),同时消除代码调用使用序列化的PHP数据的漏洞。

它将具有与序列化数据类似的性能特征。

数据库存储

这是最好的考虑,你有大量的configuration,但有select性的需要什么是当前的任务 – 我很惊讶地发现,在大约150个数据项,从本地MySQL实例检索数据比反序列化一个数据文件。

OTOH它不是一个存储证书的好地方,可以连接到数据库。

执行环境

您可以在运行PHP的执行环境中设置值。

这删除了PHP代码在configuration的特定位置查找的任何要求。 OTOH不能很好地适应大量的数据,并且在运行时很难普遍地改变。

在客户端

我没有提到存储configuration数据的地方是在客户端。 networking开销又意味着这不能很好地适应大量的configuration。 由于最终用户对数据有控制权,因此必须以可检测到任何篡改的格式(即使用encryption签名)进行存储,并且不得包含任何因其披露而受损(即可逆encryption)的信息。

相反,这对于存储由最终用户拥有的敏感信息具有很多好处 – 如果您不在服务器上存储这些信息,则不能从那里窃取。

networking目录存储configuration信息的另一个有趣的地方是DNS / LDAP。 这将适用于less量的小部分信息 – 但是您不需要坚持第一种正常forms – 例如SPF 。

基础架构支持caching,复制和分发。 因此,它适用于非常大的基础设施。

版本控制系统

像代码一样的configuration应该被pipe理和版本控制 – 因此直接从你的VC系统获得configuration是一个可行的解决scheme。 但是,这通常伴随着显着的性能开销,因此caching可能是明智的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值