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"
それは奇妙です。それは私にとってまったく同じことをしました。このようなことを試していただけませんか?
switch($_SERVER["HTTP_Host"]){
case "localhost":
define('ENVIRONMENT', 'development');
break;
default:
define('ENVIRONMENT', 'production');
break;
}
echo ENVIRONMENT ; // output development
サーバーの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' => ''
];
}
他の答えに追加します。以下の答えはやり過ぎのように見えるかもしれません(環境変数を定義する必要がある場合、なぜ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;
}
}
これを使用してcodeigniterの環境を自動変更することもできます
if ($_SERVER['HTTP_Host'] == 'localhost'){
define('ENVIRONMENT', 'development');
}else{
define('ENVIRONMENT', 'production');
}