我正在开发一个小型应用程序,可能想要将其提供/出售给其他人。 我想保留一些设置,并创建一个管理界面来修改它们。 什么是存储这些设置的最佳方式?对于我将拥有的10-20个设置,DB表似乎过于复杂,而且我希望检索这些设置尽可能快。另一个可行的选择是使用平面文件吗?使用平面文件有哪些缺陷?存储多个键和值的平面文件的最快/最简单的接口是什么?
parse_ini_file
来做这个。; This is a sample configuration file
; Comments start with ';', as in php.ini
[first_section]
one = 1
five = 5
animal = BIRD
[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"
[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"
define('BIRD', 'Dodo bird');
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);
Array
(
[first_section] => Array
(
[one] => 1
[five] => 5
[animal] => Dodo bird
)
[second_section] => Array
(
[path] => /usr/local/bin
[URL] => http://www.example.com/~username
)
[third_section] => Array
(
[phpversion] => Array
(
[0] => 5.0
[1] => 5.1
[2] => 5.2
[3] => 5.3
)
)
)
这要看你想存储什么类型的“设置”。它们是像数据库主机、端口和登录之类的“引导程序”设置,还是应用程序特定的设置?
让管理员界面在文件系统上编写文件的问题在于需要的权限才能写入文件。每当您打开 Web 服务器以写入文件时,都会增加代码中的错误可能性,从而允许严重的特权升级。
数据库旨在允许读取和写入而不引入潜在的系统安全风险。
我们使用“生成”的 PHP 文件来存储静态配置数据(如数据库访问信息)。它是由命令行上的用户使用实用程序脚本生成的。此后,所有非静态信息都存储在数据库表中。数据库表可以轻松地从管理区域进行更新。随着应用程序的升级,它也很容易扩展和升级。
这也更容易将需要备份的“数据”集中在一个地方。
我可以建议使用 memcached 或类似的东西来加速吗?
这只是一些想法...
我认为通过SimpleXMLElement使用XML非常有用,特别是在这种情况下。
配置文件(config.xml):
<config version="1">
<foo>value</foo>
<bar>
<baz>Boo</baz>
</bar>
</config>
读取它的代码:
$config = simplexml_load_file('config.xml');
$version = (int) $config['version'];
$foo = (string) $config->foo;
$baz = (string) $config->bar->baz;
将其写入文件的代码:
$config = new SimpleXMLElement('<config version="1"/>');
$config->foo = 'value';
$config->bar->baz = 'Boo';
$config->asXML('config.xml');
我通常使用 PHP 数组来作为配置文件。
<?php
return array
(
'user' => 'name',
'pass' => 'word',
'one_day' => 60 * 60 * 24
);
?>
一些优点是,就像morendil提到的那样,不需要解析,速度非常快,您可以存储各种复杂的变量/方程式,并且您可以执行以下操作:
<?php
$config = include 'path/to/file.php';
?>