我目前正在对我的CMS进行大规模改造,并且想知道,存储网站偏好的最佳方式是什么......
目前我的pereference设置在数据库中,充满了结构字段(每个字段代表它自己的首选项),但只使用了id 1。并且...我不知何故不喜欢这个解决方案。现在我正在考虑在php文件中设置首选项,但是编辑首选项存在问题。好吧,不是问题,但在我看来,使用文件作为存储是不好的。
对于网站偏好,我的意思是“网站标题”,“网站标语”,“元关键字”,“元描述”等,而不是数据库信息或其他完全静态的值。
那么......你们可以分享其他任何解决方案吗?
提前致谢!
答案 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。