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"
答案 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';
在某些时候环境设置好了,你不能再用定义来改变它。