我正在编写针对非极客,非程序员的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只是一个很好的解决方案。
答案 0 :(得分:5)
我自己写的是ini文件。正如你所说,语法非常简单,这就是你想要的配置文件。 ini格式的“键+值”配对正是您在没有数据库的情况下获得的数据。
相关SO您可能已经看过:create ini file, write values in PHP
另外,您可以使用parse_ini_file()来阅读它。
XML并不是那么糟糕。编写它可能需要做更多的工作(并且可能不像用户文件那样清晰),但阅读它真的很容易。
<?php
// Create file
$xml = new SimpleXMLElement( '<?xml version="1.0" ?><config></config>' );
// Add stuff to it
$xml->addChild( 'option1' );
$xml->option1->addAttribute( 'first_name', 'billy' );
$xml->option1->addAttribute( 'middle_name', 'bob' );
$xml->option1->addAttribute( 'last_name', 'thornton' );
$xml->addChild( 'option2' );
$xml->option2->addAttribute( 'fav_dessert', 'cookies' );
// Save
$xml->asXML( 'config.xml' );
?>
<?php
// Load
$config = new SimpleXMLElement( file_get_contents( 'config.xml' ) );
// Grab parts of option1
foreach( $config->option1->attributes() as $var )
{
echo $var.' ';
}
// Grab option2
echo 'likes '.$config->option2['fav_dessert'];
?>
billy bob thornton likes cookies
答案 1 :(得分:2)
我选择 ini 。他们写起来真的不那么难。我个人讨厌XML。它太臃肿了......即使文件大小无关紧要,它仍然让我感到畏缩的是它的冗长和我必须要做的打字量。此外,人们都很愚蠢。他们不会关闭他们的标签。
答案 2 :(得分:1)
标准方式是XML文件。它们不会产生那么多开销并且易于扩展。但是,JSON文件在编程端是最简单的。
我对自己的偏好排名:
答案 3 :(得分:1)
除非你有1000多个选项,否则你真的不应该担心XML文件的大小。这里的目标是为用户保持简单。这意味着无论您选择哪种方法(我认为JSON不应该是其中之一),都应该在每个配置行中大量记录。
你的两个文件解决方案让我回到sendmail配置的日子,让我不寒而栗。
我会选择XML,它会自动记录到<Email>hi@hi.hi</Email>
答案 4 :(得分:1)
好吧,你可以使用PHP的serialize()
,尽管它是人类可读的,但它并不是人类最可读的东西。它与JSON实现的级别相同。