[英]What would be the best way to store site preferences?
我目前正在大规模修改CMS,想知道存储网站首选项的最佳方法是什么...
目前,我的首选设置是在数据库内,充满了结构字段(每个字段代表其自身的首选项),但仅使用ID 1。 而且...我不知何故不喜欢这种解决方案。 现在我正在考虑在php文件中设置首选项,但是编辑首选项存在问题。 好吧,这不是问题,但是在我看来,使用文件作为存储只是不好的。
对于网站首选项,我的意思是“网站标题”,“网站口号”,“元关键字”,“元描述”等,而不是数据库信息或其他完全静态的值。
那么...你们还有其他解决方案可以分享吗?
提前致谢!
我喜欢CodeIgniter的网站配置方法。 将所有配置文件存储在一个公共文件夹中,例如/config
,并将每个配置项放置到$config
数组中,如下所示:
<?php
$config['base_url'] = "http://foo.bar/baz";
$config['language'] = "english";
$config['charset'] = "UTF-8";
// ...
以后,可以使用某些全局方法自动加载和引用这些文件,例如:
get_config_item("base_url");
好吧,这个问题没有简单的答案。 如@Redlab所问,偏好是否经常变化? 如果是这样,那么数据库似乎是“更好”的选择。 但是还有更多的东西……
这些偏好是否很多? 如果是这样,那么将其存储在文件系统中对于命名空间文件和层次存储来说可能是有意义的。 例如:
在site.php中
return array(
'title' => 'This is my page title',
'meta' => array(
'description' => 'My Meta Description',
'keywords' => 'key1, key2, key3',
),
);
基本上,为每个“命名空间”创建一个文件以将事物分组在一起。
这样做的好处是性能和可管理性。 您可以根据需要按名称空间延迟加载配置。 您可以通过添加一个称为名称空间的字段,然后延迟加载这些字段来模拟数据库中的效果,但是由于每次访问都需要查询,因此它的运行速度将大大降低。 如果您有很多设置,那么在每次点击时(甚至一次)从数据库加载它都不是最佳选择...
我要做的是使用点表示法。 因此,从上面的示例中,要获取meta关键字将是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代码)。
最重要的是,由于它可以利用操作码缓存,因此非常高效,不会降低您的页面速度。
我认为您当前使用数据库进行的设置是理想的。 看一下WordPress如何存储这种网站首选项-他们是在数据库中完成的。 Config属于静态配置文件,即数据库中的Preferences。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.