【发布时间】:2011-03-06 03:39:16
【问题描述】:
我正在编写一个针对非极客、非程序员的 PHP 应用程序。我需要创建一个带有一堆“选项”的选项页面,然后将这些选项存储在某个地方。使用数据库应用程序(MySQL/PostgreSQL/SQLite)是不可能的,因为它需要比用户需要做的更多的配置(如果他不想,我不希望用户做任何类型的配置) .所以剩下的唯一解决方案就是将配置写入配置文件。另一方面,如果用户是极客并且他想直接编辑配置文件(或者如果他想通过 SSH 或任何原因远程编辑文件,我也希望该配置文件是人类可读的。 ..)
以下是我发现的几个潜在解决方案:
使用 JSON 文件...
...从文件中检索数据,使用 json_decode 转换数据,将其输出为 HTML,检索任何更改,使用 json_encode 进行编码等。你得到了图片。我不喜欢这种方法有几件事,主要是使用 PHP 编码的 JSON 数据将不会被很好地格式化,并且如果不事先重新格式化就很难编辑。
使用 XML 文件
我不会描述那个解决方案,因为我也不是很喜欢它......而且我不知道如何使用 XSLT,也不想学习......而且因为它是一个非常重量级的解决方案,至少与 JSON 解决方案相比。如果我错了,请纠正我。
使用 INI 文件
我喜欢 INI 文件,我真的很喜欢它们!我认为它们确实是最易读的,而且很难搞砸(即:语法错误)。该解决方案的问题在于没有本地方式来编写/编辑 ini 文件。我发现了一个主题,显示了一个自定义方法来编写一个......如果我没有找到更好的解决方案,这可能是我会采用的解决方案......
使用两个文件
最后一个解决方案似乎与 INI 解决方案一样合理。事实上,我可以使用一个 INI 文件作为“输入”(用户可以根据需要编辑的文件)和一个 XML/JSON 文件作为输出(每次用户使用更改选项时 PHP 将编辑的文件)网络前端)。此时,最好的解决方案是,如果用户直接编辑配置文件,则要求用户手动重新加载配置,以便“输出”文件始终是最新的。
我知道上述解决方案都不是完美的,这就是我创建这个主题来寻求建议的原因。什么是最好的解决方案?也许(可能)我错过了另一个解决方案。
最后一件事:YAML 不是一个有效的解决方案,因为如果您不习惯它,它会更容易弄乱语法。 PHP 也不是一个解决方案,因为用 PHP 编辑 PHP 很痛苦。如果我想检索一些配置但不直接通过 Web 前端编辑它,PHP 只是一个很好的解决方案。
【问题讨论】:
-
我认为如果您能告诉我们您的“选项”的外观会更好。例如,它们主要是一堆布尔值吗?任意文本值?单行文本值?多值值(数组)?
-
我认为从两个来源编译配置数据是不必要的复杂。但是,您应该可能会在某处保存配置的“最后一个正确的副本”,以防用户做出破坏事情的更改。此外,请注意,即使用户以后使用 GUI,他/他对配置文件所做的手动更改也可能会被保留。
标签: php xml json configuration-files ini