1

想知道给定codeigniter $_SERVER['SERVER_NAME'],我可以为每种类型加载不同的配置文件$_SERVER['SERVER_NAME']吗?

例如,如果 url 是 localhost,config_localhost则改为运行,如果 url 是实时的,则运行config_live. 对于 database.php 也是如此。

到目前为止我所做的是检查相应的文件和一个开关循环来检查服务器名称。

     switch ($_SERVER['SERVER_NAME']) {      
          case KH_SERVER_NAME:  // development server   
              $config['base_url']    = 'localhost';     
              break;

          default:  // live server 
            $config['base_url']    ="http://www.domain.com";    
             break;
        }
4

1 回答 1

2

是的,你可以做这样的事情。我建议将这样的内容放入您的根目录index.php中,以便一开始就设置好:

  switch( $_SERVER['HTTP_HOST'] )
  {
    case 'www.domainname.com':
      define('ENVIRONMENT', 'production');
    break;
    case 'dev.domainname.com':
      define('ENVIRONMENT', 'development');
    break;
    case 'test.localhost':
    case 'www.test.localhost':
      define('ENVIRONMENT', 'local');
    break;
  }

这定义了一个名为的变量ENVIRONMENT,然后您可以在整个配置文件(和应用程序,如果您愿意)中使用该变量 - 这样,您可以执行以下操作,而不是针对 $_SERVER 变量进行测试:

switch (ENVIRONMENT)
{
  case 'local':
  case 'development':
    $config['base_url'] = 'localhost';
  break;

  case 'production':
    $config['base_url']    ="http://www.domain.com";
  break;
}

和其他方便的东西,如:

switch (ENVIRONMENT)
{
  case 'local':
    error_reporting(E_ALL);
  break;

  case 'development':
    error_reporting(E_ALL & ~E_DEPRECATED);
  break;

  case 'production':
    error_reporting(0);
  break;
}

这也可以在主应用程序中使用,例如决定是否要在视图中输出分析跟踪代码 - 通常只希望在生产中输出 - 例如:

  <? if(ENVIRONMENT == 'production'): ?>
    <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
  <? endif ?>
于 2013-06-11T09:37:22.377 回答