Codeigniter环境设置

时间:2013-11-15 14:08:27

标签: php codeigniter development-environment

Codeigniter开发环境未设置。我总是在index.php中使用这段代码。但我不明白为什么当我在localhost工作时,我将“生产”作为输出。

switch(dirname(__FILE__)){
 case "H:\wamp\www\sitedirectory":
    define('ENVIRONMENT', 'development');
 break;
 default:
    define('ENVIRONMENT', 'production');
 break;
 }

  echo ENVIRONMENT ;   // output is "production" while i am on localhost
  echo dirname(__FILE__) ;  // output is "H:\wamp\www\sitedirectory"

5 个答案:

答案 0 :(得分:17)

这很奇怪。它对我来说完全一样。你能尝试这样的东西吗?

switch($_SERVER["HTTP_HOST"]){
 case "localhost":
    define('ENVIRONMENT', 'development');
 break;
 default:
    define('ENVIRONMENT', 'production');
 break;
 }

 echo ENVIRONMENT ;   // output development

答案 1 :(得分:3)

要根据服务器的IP动态设置环境,下面我使用正则表达式来检查本地IP,例如127.0。*和10.0。*。

在项目的根目,请查看index.php并替换:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

使用:

$server_ip = getHostByName(getHostName());

if (preg_match("/^(127\.0\.|10\.0\.).+/i", $server_ip)) {
    define("ENVIRONMENT", "development");
    define("BASEURL", "http://localhost:8000/");
} else {
    define("ENVIRONMENT", "production");
    define("BASEURL", "https://domain.com/");
}

请务必将BASEURL中的值替换为您自己的application/config/config.php添加:

$config['base_url'] = BASEURL;

要在数据库设置application/config/database.php之前进一步增加$db['default'] = array(

if(ENVIRONMENT !== 'production') {
    $db = [
            'username' => '',
            'password' => '',
            'database' => '',
            'hostname' => '127.0.0.1'
    ];
} else {
    $db = [
            'username' => '',
            'password' => '',
            'database' => '',
            'hostname' => ''
    ];
}

答案 2 :(得分:1)

添加其他答案。现在下面的答案可能看起来有点过分(如果你必须定义环境变量那么为什么要使用HTTP_HOST?根据我的经验,CI无法反映任何对环境变量的更改,即使重新启动apache后也是如此。它以某种方式得到了从CLI发送请求时更新的值。)

if (php_sapi_name() === 'cli') 
{
    // incase the request is made using the cli, the $_SERVER['HTTP_HOST'] will not be set

    define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
} 
else 
{
    switch ($_SERVER["HTTP_HOST"]) 
    {
        case "localhost":
            define('ENVIRONMENT', 'development');
            break;
        default:
            define('ENVIRONMENT', 'production');
            break;
    }
}

答案 3 :(得分:0)

您也可以使用此代码在codeigniter中自动更改环境

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

答案 4 :(得分:0)

在 index.php 文件中的以下行之前设置您的环境。(CI 4.0.4)

$app = require rtrim($paths->systemDirectory, '/ ') . '/bootstrap.php';

在某些时候环境设置好了,你不能再用定义来改变它。