如何区分环境是否是虚拟主机?

时间:2011-06-23 15:25:26

标签: php environment-variables virtualhost superglobals

我这里有这个代码:

$config['SUBFOLDER'] = '/';
$config['APP_URL'] = 'http://'.$_SERVER['HTTP_HOST'].$config['SUBFOLDER'];

在整个HTML模板中使用APP_URL。问题是 - 配置需要尽可能通用,因此切换环境时要做的事情少。

现在,当我为我的项目配置虚拟主机时,它就像这样工作,但当它不是虚拟主机,而是一种localhost / myproject / - $ config ['SUBFOLDER']必须是手动设置为/ myproject /

如何以编程方式执行此操作?

3 个答案:

答案 0 :(得分:0)

检查URL是否包含LOCALHOST或普通域名,并根据URL的条件将您的配置包装起来。

答案 1 :(得分:0)

您可以在例如htaccess文件中设置变量。

#.htccess
SetEnv APPLICATION_ENV development

然后在您的网站上检查一下:

<?php
//live
$config['SUBFOLDER'] = '/';
//on localhost - override live settings
if(APPLICATION_ENV === 'development')
{
  $config['SUBFOLDER'] = '/myproject';
}

使用这种方法,您只需要更改htaccess文件中的一个变量。

如果您只想检查自己是否在localhost上运行,那么对$_SERVER['HTTP_HOST']进行检查也会有效:

<?php
if($_SERVER['HTTP_HOST'] === 'localhost')
{
  $config['SUBFOLDER'] = '/myproject';
}

答案 2 :(得分:0)

我采取了稍微不同的方法..

if ($_SERVER['HTTP_HOST'] == 'testingserver') // local environment here
{
    // local settings
}
else if ( // remote environment here
    $_SERVER['HTTP_HOST'] == 'www.something.com' ||
    $_SERVER['HTTP_HOST'] == 'something.com'
) 
{
    // remote settings
}
else // error.. this shouldn't happen
{
    echo $_SERVER['HTTP_HOST']; 
}