保持PHP应用程序设置的最佳方法是什么?

时间:2009-02-08 23:39:36

标签: php database web-applications file-io settings

我正在开发一个小应用程序,我可能想要/卖给别人。我想保留一些设置,并创建一个管理界面来修改它们。什么是最好的存储方式?对于我将拥有的10-20个设置,DB表似乎有点过分,我希望尽可能快地检索这些设置。平面文件是另一种可行的选择吗?使用平面文件有哪些陷阱?与存储多个键和值的平面文件接口的最快/最简单方法是什么?

6 个答案:

答案 0 :(得分:15)

我经常使用PHP的parse_ini_file

所以如果你用这个写一个.ini文件:

; 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"

并使用此PHP代码阅读:

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
                )

        )

)

答案 1 :(得分:2)

PHP具有读取.ini文件的功能。

http://is2.php.net/manual/en/function.parse-ini-file.php

答案 2 :(得分:2)

这实际上取决于您要存储的“设置”类型。它们是“引导”设置,如数据库主机,端口和登录?或者它们是专门针对您的应用程序的应用程序设置吗?

让管理界面在文件系统上写入文件的问题是为了写入文件所需的权限。无论何时打开Web服务器来写文件,都会增加代码中的错误可能导致严重权限升级的可能性。

数据库旨在允许读取和写入,而不会引入潜在的系统安全风险。

我们使用“生成的”PHP文件来存储静态配置数据(如数据库访问信息)。它由用户在命令行上由实用程序脚本生成。之后,所有非静态信息都存储在数据库表中。反过来,数据库表很容易从管理区域更新。在升级应用程序时,可以轻松扩展和升级。

集中需要在一个地方备份的“数据”也更容易。

我可以建议使用memcached或类似的东西加快速度吗?

只是几个想法......

答案 3 :(得分:1)

我认为通过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');

使用平面文件的主要缺陷是它可能导致脚本崩溃或并发编辑时可能出现数据损坏。

答案 4 :(得分:0)

考虑序列化到文件的PHP对象(或数组)。没有可编写的解析代码,足够快,可扩展。需要注意的是,当代码增长时,可以考虑采用“升级”设置文件的策略来支持进一步的设置。

答案 5 :(得分:0)

我只是使用PHP数组来配置文件。

<?php 
return array
(
    'user' => 'name',
    'pass' => 'word',
    'one_day' => 60 * 60 * 24
);
?>

有些优点是,像Morendil提到的那样,不需要解析,它的速度最快,你可以存储各种复杂的变量/方程式,你可以做到以下几点:

<?php
$config = include 'path/to/file.php';
?>