如何存储设置

时间:2012-03-29 15:52:47

标签: php mysql

我目前正在处理某个页面,我正在设置“设置”区域(标题,背景颜色,标签,说明等)。

所以我可以在管理员面板上快速编辑它们。

目前我正在考虑一个名为| value的表,并在我的include(每页)头文件中调用它。

现在如果有一天我会得到更多的用户,那么除了这个基本上会查询大部分时间的旧数据(标题和其他设置不会每天更改)

所以我想到了这一点。

  • 我很少会更改设置(每月最多)

  • 每当我在管理面板上提交表单时,可能会调用函数fetchsettings()来更改一些设置,这些设置基本上删除了settings.php文件的内容,并将新设置粘贴到数组中(数组名为= >值

为什么我会这样做:

我在php世界中很安静,但我听说设置和变量可以被缓存,这会阻止每次访问的查询,并且每次我在管理面板上编辑时都只会进行查询。

欢呼声,

sarro

2 个答案:

答案 0 :(得分:1)

从性能角度来看,以这种方式将数组写入文件是一种很好的方法。包含该数组的文件可以由您的操作码缓存缓存,这比从每个请求的表中读取设置更可取。该文件应存储在文档根目录之外,或至少以某种方式受到保护。

UPDATE 由于您没有操作码缓存,因此使用PHP数组似乎毫无意义,而只是将存储的数据序列化到文件中。这是一个简单的单例配置类,您可以将其用作起点。如果文件不存在,您可以完全删除在db中存储配置或修改构造函数以从db读取配置数据。

<?php

class Config {

    private static $instance;
    private $changes = false;
    private $config;
    private $file = './config.dat';

    private function __construct() {
        $this->config = unserialize(file_get_contents($this->file));
    }

    public static function getInstance() {
        if (!self::$instance) {
            self::$instance = new Config();
        }
        return self::$instance;
    }

    public function __set($name, $value) {
        $this->config[$name] = $value;
        $this->changes = true;
    }

    public function __get($name) {
        if (array_key_exists($name, $this->config)) {
            return $this->config[$name];
        }
        return null;
    }

    public function __toString() {
        return print_r($this->config, true);
    }

    private function saveChanges() {
        file_put_contents($this->file, serialize($this->config));
    }

    public function __destruct() {
        if ($this->changes) {
            $this->saveChanges();
        }
    }

}

$config = Config::getInstance();
print $config;

答案 1 :(得分:1)

您可以将设置存储在ini文件中。易于在人类中可视化,易于阅读PHP parse_ini_file

样品:

[environment]
maintenance=false

[database]
dsn="mysql://localhost/test"
username="username"
password="password"

编辑: 我必须同意Nnichols,你当然应该将这个文件存储在文档根目录之外,这样它就无法通过网络访问了(你不希望任何人阅读你的数据库设置,对吗?)。

此外,请参阅this SO question,了解如何从管理面板向其写信。