我应该将我的网站配置值放在 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 服务器设置中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章
Bitnami LAMP 堆栈 .htmaccess 不工作