在PHP中使用动态配置文件有什么问题?

时间:2012-09-09 11:28:49

标签: php .htaccess configuration

我最近将我的网站文件转换为可在任何路径上工作的文件。我正在使用虚拟主机来维护与主生产服务器上相同的.htaccess文件。我的初始化文件包含我的所有模型,它是动态编写的,用于查找确切的系统文件路径并相应地更新网站,以便我可以将整个网站上传到任何地方。

问题出在配置文件中。根据我是开发还是开发,我连接到不同的数据库。因此,我先检查一下是否正在运行本地服务器。我通过在数组中存储我的dev的命名约定并循环遍历数组来查看HTTP_HOST是否与值匹配来实现此目的。

示例:

$dev_names = array('localhost','.dev');

然而,当我前几天在聊天中提到这个时,a respected user told me他从未这样做过。相反,他有2个配置文件,并在正确的时间包括正确的一个?虽然我的方法出了什么问题但我没有得到?

你能指出我计划中的缺陷,以帮助我了解专家吗?

(PS。为了获得奖金,你可以快速了解一下bootstrap是如何工作的,听到这个词被抛出,不确定它是用PHP编写还是其他什么。)

3 个答案:

答案 0 :(得分:2)

我没有看到你的方法有什么问题,我想不出一个不这样做的好理由。

我个人在php文件中这样做;

 if ($_SERVER['SERVER_NAME'] == 'localhost')
 {
    define('ENVIRONMENT', 'development');
 }
 else
 {
    define('ENVIRONMENT', 'production');
 }

然后我的所有配置都挂了。效果非常好 - 意味着我在Dev& amp;生产

答案 1 :(得分:1)

我怀疑他所得到的是你试图让你的网站便于移动实际上并不是那么便携。如果将其移动到新服务器,则必须编辑配置文件。

具体来说,当您将配置文件检入某种版本控制系统并影响其他人时,这就成了一个问题。 理想情况下,你会使用这样的东西:

<?php // global config file which is checked into VCS
    $SETTING = "FOO";
    @include "config/local_settings.php"; // overrides go here
 ?>

您将所有本地设置覆盖放在本地文件中,并且不将其提交给VCS。尽管如此,提交像local_settings_example.php这样的东西是很常见的,以便让其他用户了解他们需要自定义的内容。如果你感到慷慨,可以用评论的例子填写。

答案 2 :(得分:1)

我只能在我喜欢的设置上投入2美分。主要是为了避免不需要的版本控制覆盖或冲突。在我看来,服务器应该决定它是生产服务器还是开发服务器,而不是应该更改的脚本中的变量。类似于以下示例的方法甚至可以在完全不同的开发设置上为个人设置环境。

首先设置变量

$_SERVER['SERVER_ADMIN'];

检查生产或开发环境。在本地使用虚拟域名,例如@ dev.elop.loc(例如dbf@dev.elop.loc),它们永远不会存在。像这样的函数

// environment development check
function __env_dev($check) {
  return substr($_SERVER['SERVER_ADMIN'], -(strlen($check))) === $check; 
}
// false = production
// true = development
__env_dev("@dev.elop.loc");

可以确定环境。根据我的经验,生产服务器总是有一个SERVER_ADMIN变量集(如果没有,它们确实应该,即使它必须是默认的you@example.com)到真实地址,避免默认you@example.com。如果对实时服务器的支持在您自己的服务/维护中,那么将其更改为真实地址以将其与开发服务器区分开来并不是一件大事;)