我应该将我的网站配置值放在 LAMP 服务器设置中的啥位置?

Posted

技术标签:

【中文标题】我应该将我的网站配置值放在 LAMP 服务器设置中的啥位置?【英文标题】:Where do I put my website configuration values in a LAMP server setup?我应该将我的网站配置值放在 LAMP 服务器设置中的什么位置? 【发布时间】:2012-01-19 16:35:48 【问题描述】:

我通常将数据库和网站特定的配置值放入 .php 文件中的全局变量中。这将包含在需要访问数据库的任何页面中。

这些东西应该去哪里更明智?我可以向 php.ini 添加任意值吗?如果可以,如何添加?或者 apache 中的 http.conf 怎么样?我可以这样配置我的网站吗?

理想情况下,我想要一个解决方案,这意味着不会在每个请求上都读取配置。

【问题讨论】:

【参考方案1】:

在 Apache 中你可以使用SetEnv

SetEnv NAME value

可以通过$_SERVER['NAME']访问

http://httpd.apache.org/docs/2.2/mod/mod_env.html

使用 PHP,您可以在 INI 中设置默认 mysql 连接设置

mysql.default_host = ...
mysql.default_user = ...
mysql.default_password = ...

mysqli.default_host = ...
mysqli.default_user = ...
mysqli.default_password = ...

【讨论】:

我喜欢这个想法,并感谢您对默认连接值的提醒。我有点担心不小心用不小心的 phpinfo 以这种方式暴露数据库密码 如果密码被泄露,@izb 应该不会太重要。只要密码是唯一的,并且只允许来自本地主机的连接。【参考方案2】:

我的经验表明,最简单的方法是最好的方法,所以我会将数据库连接配置文件放在一个文件中,该文件是项目的一部分。为什么?因为:

每个项目都有或应该有配置文件(INI、XML、JSON....) 全局变量 r 目前过度杀伤和死亡 如果有人想找到更改数据库配置的位置,Apache 文件将是他们应该检查的最后位置!

我对您的简单解决方案的建议是创建一个文件,例如 Config.php,并在其中放置一个类,该类可以加载 XML、INI 或其他类型的带有结构数据的文件。然后通过调用 getters,您可以随时随地获取您的配置。

【讨论】:

我有点在寻找配置被读取一次的东西,而不是在每个页面请求上【参考方案3】:

正如 Petah 指出的那样,您可以通过 SetEnv 将数据作为环境值放入 Apache。

无论从安全角度如何,您都没有获得任何好处,这更多的是一个偏好问题(不要忘记,您不能通过诸如 phpinfo() 之类的东西显示您的环境变量)。

正如您所说,另一种常见的方法是将您的配置变量保存在 documentroot 之外的文件中,以便浏览器无法访问它,并确保您的代码不会读取并将其内容显示给其他人.

我认为没有奢侈的酷方法可以做到这一点:)

【讨论】:

【参考方案4】:

我通过摆弄找到了一个更好的方法。您可以向 php.ini 添加任意配置选项,例如

[MyGreatWebsite]
dbname=db_awesome

您可以使用get_cfg_var 函数检索它们,例如

get_cfg_var('dbname')

它不是通过 phpinfo 暴露东西(就像一个 env 变量那样),它只读取一次配置(可验证,因为更改值需要重新启动服务器)

【讨论】:

为什么不好?为什么比同一个文件中现有的 mysql.default_host 差?【参考方案5】:

存储数据库凭据

我强烈建议在您的 .htaccess 文件中将 INI 与 SetEnv 结合使用。正如其他人已经说过的那样。

对象持久性

但是,如果您想避免每次请求都加载这些数据,那么您将需要某种对象持久性。例如,Doctrine 或 MongoDB 或 both。 https://***.com/a/4081150/486233

object persistence in php

【讨论】:

就个人而言,我喜欢单独使用 MongoDB 的简单性,但 Doctrine 很棒!

以上是关于我应该将我的网站配置值放在 LAMP 服务器设置中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

大流量需要为 LAMP 服务器设置哪些配置?

Bitnami LAMP 堆栈 .htmaccess 不工作

我应该将我的图像放在我的 iPhone 项目中的啥位置?

定期网站解析消耗大量数据下载。我应该将我的逻辑迁移到服务器吗?如何?

Azure 网站 301 重定向 - 我应该把它放在哪里?

我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?