gpt4 book ai didi

php - 存储网站首选项的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-29 09:18:18 25 4
gpt4 key购买 nike

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

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

对于网站首选项,我指的是“网站标题”、“网站口号”、“元关键字”、“元描述”等,而不是数据库信息或其他完全静态的值。

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

提前致谢!

最佳答案

嗯,这个问题没有简单的答案。正如@Redlab 所问,偏好是否经常变化?如果是这样,那么数据库似乎是“更好”的选择。但它的意义远不止于此......

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

在 site.php 中

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

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

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

我所做的是使用点表示法。因此,从上面的示例中,获取元关键字将是 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 代码)的用于存储和检索信息的系统。

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

关于php - 存储网站首选项的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com