存储网站偏好的最佳方法是什么?

时间:2010-07-20 20:22:34

标签: php mysql

我目前正在对我的CMS进行大规模改造,并且想知道,存储网站偏好的最佳方式是什么......

目前我的pereference设置在数据库中,充满了结构字段(每个字段代表它自己的首选项),但只使用了id 1。并且...我不知何故不喜欢这个解决方案。现在我正在考虑在php文件中设置首选项,但是编辑首选项存在问题。好吧,不是问题,但在我看来,使用文件作为存储是不好的。

对于网站偏好,我的意思是“网站标题”,“网站标语”,“元关键字”,“元描述”等,而不是数据库信息或其他完全静态的值。

那么......你们可以分享其他任何解决方案吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

我喜欢CodeIgniter的网站配置方法。将所有配置文件存储在公共文件夹中,例如/config,并将每个配置项放入$config数组,如下所示:

<?php

    $config['base_url'] = "http://foo.bar/baz";
    $config['language'] = "english";
    $config['charset']  = "UTF-8";
    // ...

稍后,可以使用某种全局方法自动加载和引用这些文件,例如:

get_config_item("base_url");

答案 1 :(得分:1)

嗯,这个问题没有简单的答案。正如@Redlab所问,偏好经常变化吗?如果是这样,那么数据库似乎是“更好”的选择。但是还有很多东西......

这些偏好有很多吗?如果是这样,那么将它存储在文件系统中可能对命名空间文件和层次存储有意义。例如:

在site.php中

return array(
    'title' => 'This is my page title',
    'meta' => array(
        'description' => 'My Meta Description',
        'keywords' => 'key1, key2, key3',
    ),
);

基本上,为每个“命名空间”创建一个文件以将事物分组在一起。

这样做的好处是性能和可管理性。您可以根据需要在每个命名空间的基础上延迟加载配置。您可以通过添加名为namespace的字段来模仿数据库中的效果,然后延迟加载这些字段,但由于每次访问都需要查询,因此速度会慢得多。如果你有很多设置,那么在每个页面命中(甚至一次)上从数据库加载它也不会是最佳的...

我所做的是使用点符号。因此,从上面的示例中,获取元关键字将是site.meta.keywords。这实际上相当容易:

class Config {
    protected $data = array();

    public function get($name, $default = null) {
        $parts = explode('.', $name);
        $ns = array_shift($parts);
        if (!isset($this->data[$ns])) {
            $this->loadNS($ns);
        }
        $search = $this->data[$ns];
        foreach ($parts as $part) {
            if (is_array($search) && isset($search[$part])) {
                $search = $search[$part];
            } else {
                return $default;
            }
        }
        return $search;
    }

    protected loadNS($name) {
        $path = PATH_TO_CONFIG . $name . '.php';
        if (is_file($path)) {
            $this->data[$name] = include($path);
        } else {
            $this->data[$name] = array();
        }
    }
}

您可以轻松添加集合和保存方法。

保存文件:

public function saveToFile($ns) {
    if (!isset($this->data[$ns])) {
        $this->loadNS($ns);
    }
    $out = '<?php return '.var_export($this->data[$ns], true).';';
    $path = PATH_TO_CONFIG . $ns . '.php'
    file_put_contents($path, $out);
}

什么结果很容易维护(因为它只是写入文件系统)并且易于手动修改(因为它只是php代码)系统用于存储和检索信息。

最重要的是,因为它可以利用操作码缓存,所以它非常高效,并且不会减慢你的页面速度......

答案 2 :(得分:0)

在我看来,您使用数据库进行的当前设置是理想的选择。看看WordPress如何存储这种网站首选项 - 他们在数据库中执行此操作。 Config属于静态配置文件,DB中的Preferences。