web-dev-qa-db-ja.com

Codeigniter環境設定

Codeigniter開発環境が設定されていません。私は常にindex.phpでこのコードを使用します。しかし、ローカルホストで作業しているときに、出力として「本番」が表示される理由がわかりません。

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"
8
Zohaib

それは奇妙です。それは私にとってまったく同じことをしました。このようなことを試していただけませんか?

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

 echo ENVIRONMENT ;   // output development
20
bmorenate

サーバーのIPに基づいてENVIRONMENTを動的に設定するために、以下では正規表現を使用して、127.0。*や10.0。*などのローカルIPをチェックしました。

プロジェクトのルートで、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' => ''
    ];
}
4
Rodrigo Queiroz

他の答えに追加します。以下の答えはやり過ぎのように見えるかもしれません(環境変数を定義する必要がある場合、なぜ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;
    }
}
2
Lucky Soni

これを使用してcodeigniterの環境を自動変更することもできます

if ($_SERVER['HTTP_Host'] == 'localhost'){
    define('ENVIRONMENT', 'development');
}else{
    define('ENVIRONMENT', 'production');
}
1
Anjani Barnwal