localhost / live - 通过HTTP_HOST检测

时间:2010-05-02 11:08:11

标签: php deployment localhost

假设我在本地开发并在实时服务器上调试小东西。

在我的代码中有这样的东西是个好主意吗? :

$is_local = (strpos($_SERVER['HTTP_HOST'], 'localhost') !== false);
define ('DEBUG',$is_local);

然后在设置内容时通过我的代码使用它?

$mysql_settings = (DEBUG) ? 
  array(/*localhost settings*/) : 
  array(/*live settings*/);

通过这种方式,我可以在livehost上使用相同的文件,因此我可以同步而不必担心出现错误,例如实时服务器上的连接设置。

这是好还是错?

3 个答案:

答案 0 :(得分:5)

按照你的方式做任何事都没有错。

另一个策略是在您的开发(或其他非生产)系统上设置一些环境变量。

在apache下,你可以坚持这样的事情:

SetEnv MYAPP_ENVIRONMENT development
httpd.conf中的

或合适的.htaccess文件

然后在您的配置代码中:

if (! getenv('MYAPP_ENVIRONMENT')){
  $env = 'production';
}else{
  $env = getenv('MYAPP_ENVIRONMENT"));
}

require_once 'conf/config.' . $env . '.php';

或类似的东西。

答案 1 :(得分:2)

恕我直言,你所做的并不是 那么糟糕。

唯一的缺陷是$is_local行:

$is_local = (strpos($_SERVER['http_host'], 'localhost') !== false);

对于localhostIsAwesome.com等网站,这可能会评为TRUE。

总的来说,你做这件事的方式实际上相当不错

另一个建议是使用$_SERVER[ 'SERVER_NAME' ]

答案 2 :(得分:1)

这不是一个坏主意,如果

  1. 您只有两个环境,本地和服务器
  2. 您永远不必打开服务器的调试模式
  3. 所以它没有解决像

    这样的场景
    1. 开发,测试,制作等多种环境
    2. 两个以上开发人员的团队
    3. 我在项目中使用的做法是设置代码文件,如conf.dev.php,conf.test.php,conf.prod.php用于不同的环境设置,以及一个用于env开关标志的文件,如

      $env = 'production';
      

      然后你可以根据$ env开关动态地包含包含env setings的文件,例如:

      require_once 'conf.'.$env.'.php';
      

      请记住将conf.dev.php文件包含在git / hg / svn ignore文件中,因此出于安全原因,它不会在团队成员和conf.production.php中出现乱码。

      只是我的两分钱。