24

在 PHP 中存储配置数据以便轻松更改(通过 PHP)的最快方法是什么?首先我想有 config.php 文件,但我不能用 PHP 即时编辑它,至少不是很简单?然后我想到了拥有 XML 文件,但是为每个 HTTP 请求解析它们是压倒性的。所以,我考虑过 INI 文件,但后来我发现 INI 文件仅限于 int/string 值。最后,我得出的结论是 JSON 编码文件是最好的:

$config['database']['host'] = ...;
$config['another']['something'] = ...;
...
json_encode($config);

由于 JSON 可以存储数组,我可以用它创建相当复杂的配置,而且它的解析速度比 INI 文件快。

我的问题:我错过了什么还是有更好的方法来做到这一点?

4

7 回答 7

42

在存储 PHP 变量方面,序列化是比 JSON 更好的选择。

我喜欢var_export用于保存配置文件,并include用于加载配置信息。这使得以编程方式保存配置数据变得容易,并且也使得数据易于读取/写入:

配置.php:

return array(
 'var1'=> 'value1',
 'var2'=> 'value2',
);

测试.php:

$config = include 'config.php';
$config['var2']= 'value3';
file_put_contents('config.php', '<?php return ' . var_export($config, true) . ';');

更新的 config.php 现在包含以下内容:

return array(
 'var1'=> 'value1',
 'var2'=> 'value3',
);
于 2010-01-06T20:03:06.237 回答
2

您应该使用序列化而不是 json_encode:

http://docs.php.net/serialize

于 2010-01-06T19:52:26.430 回答
2

我存储配置的方式是将一些变量放在外部 .php 文件中,然后当我想使用这些文件时,我会说:

<?php include("fileName"); ?>

这将允许您跨多个页面共享配置信息。但是,我不确定这是最有效的方法,但它对我来说似乎是最简单的。

于 2010-01-06T19:55:34.707 回答
2

虽然对于您所追求的东西来说这很可能是矫枉过正,但我​​倾向于使用 PHP 类将配置数据存储在数据库中,以控制对其中的名称/值对的更改。(即:没有来自此类外部的直接数据库访问。)

当调用 PHP 配置类来更改一个值时,它会写出一个标准的 PHP 包含文件,其中定义了所有不同的值。

因此,读取配置数据时不会影响加载时间性能,并且可以通过 CMS 模块在数据库中更改所有配置数据。

于 2010-01-06T20:30:50.313 回答
0

我很确定您对 int/string 值是正确的,是的 JSON 是一种方式,但是序列化和反序列化字符串会更快地进行速度优化:

此链接将帮助您:

http://docs.php.net/serialize

于 2010-01-06T19:56:10.813 回答
0

我使用带有名为 config 或 settings 的表的数据库。该表有两列:

name [varchar(255)]
value [varchar(255)]

这允许轻松存储 int、float 和短字符串。

然后我创建了两个函数,GetSetting 和 SetSetting。它们分别存储一行和检索一行。我发现这极大地简化了值的存储。

于 2010-01-06T21:21:37.920 回答
0

如果你对配置文件使用 require 而不是 include ,你将获得一点性能。如果您知道配置文件将始终存在,或者您有自己的机制来检查它是否存在,则可以执行此操作。

于 2011-09-12T17:12:59.723 回答