【问题标题】:Storing Site Global Variables存储站点全局变量
【发布时间】:2012-05-11 18:24:52
【问题描述】:

快速提问 - 我正在尝试确定存储一些站点变量的最佳方式。我想在我的网站中构建一个“控制面板”类型的功能,我可以在其中选择设置,它们将反映在我的网站中。

例如 - 我有一件我正在销售的商品,它有一个价格(以及一张显示价格的图片)。我希望能够从自定义后端页面设置此全局变量,而不必去更改 img src 等。

执行此操作的最佳方法是什么?起初我认为是一个数据库表,但肯定会是一种仅访问少数站点变量的缓慢(ish)方式?我也考虑过一个文件,但想知道当值发生变化等时我将如何覆盖正确的位。

请您用您的专业知识推荐一条走下去的途径(如果有有利的方法),非常感谢! (如果其他人也使用 Yii 框架,我正在使用它)。

【问题讨论】:

    标签: php mysql yii global-variables


    【解决方案1】:

    您可能想研究使用属性 (.ini) 文件。

    函数parse_ini_file(string $filename) 返回一个由 .ini 文件存储的属性数组。

    然而,php 没有写入 ini 文件的功能,所以你需要一个自定义的。 Here 是一个 write_ini_file(array $assoc_arr, string $path),它将数组键和值添加到给定路径的 ini 文件中,必要时用新键值替换旧键值。

    【讨论】:

    • 谢谢。我对此进行了研究,它似乎很有希望,直到我找不到如何使用 PHP 写回 ini 文件?有没有办法回写(覆盖现有值)?
    • 编辑了我的答案,包括如何写入 ini 文件。
    • 没问题。您可能希望将其标记为已接受,这样没有人会浪费不必要的时间发布更多答案。
    • 不幸的是要等3分钟!那么会做
    • 我个人认为您应该避免添加任何写入磁盘的代码。表格是一种更简单的方法,因为它不必解析每个请求,您只需加载实际需要的设置。文件+解析的读取很有可能比表格慢。该表可能会一直加载到 RAM 中,因为它使用了很多。
    【解决方案2】:

    在数据库中存储站点变量并不是一个坏主意。如果您担心性能,您可以使用 memcached 缓存这些值以避免额外的数据库命中,然后您只需要根据您的使用场景正确地使缓存的值无效。

    有关详细信息,请参阅以下文章:PHP Performance Series: Caching Techniques

    【讨论】:

    • 我在考虑如何实现它。我真正想到的是:一个 1 行表,其中列用于不同的变量;或 2 列表,其中列是“变量”“值”(或沿着这些线).. 有什么比另一个更好的方式吗?
    • 我更喜欢键/值对,因为我认为它们更易于使用。只要所有内容都被缓存,第一次检索值的性能差异(一行多列与多行三列 [id, key, value])将可以忽略不计。
    【解决方案3】:

    您的要求与我的要求非常相似。受设置扩展 (http://www.yiiframework.com/extension/settings/) 的启发,我创建了自己的设置 API,该 API 在整个应用程序中都可用。看到这个https://github.com/xtranophilist/awecms/blob/f9bfc5a09bf050373b710ca15f6685ad8fea9fcd/protected/components/Settings.php get、set 和 delete 方法非常灵活,也可以进行批量操作。

    它还具有自动类型检测功能,可以从后端(即管理模块)管理设置值。

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2015-05-24
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多