假设我在本地开发并在实时服务器上调试小东西。
在我的代码中有这样的东西是个好主意吗? :
$is_local = (strpos($_SERVER['HTTP_HOST'], 'localhost') !== false);
define ('DEBUG',$is_local);
然后在设置内容时通过我的代码使用它?
$mysql_settings = (DEBUG) ?
array(/*localhost settings*/) :
array(/*live settings*/);
通过这种方式,我可以在livehost上使用相同的文件,因此我可以同步而不必担心出现错误,例如实时服务器上的连接设置。
这是好还是错?
答案 0 :(得分:5)
按照你的方式做任何事都没有错。
另一个策略是在您的开发(或其他非生产)系统上设置一些环境变量。
在apache下,你可以坚持这样的事情:
SetEnv MYAPP_ENVIRONMENT development
httpd.conf中的或合适的.htaccess文件
然后在您的配置代码中:
if (! getenv('MYAPP_ENVIRONMENT')){
$env = 'production';
}else{
$env = getenv('MYAPP_ENVIRONMENT"));
}
require_once 'conf/config.' . $env . '.php';
或类似的东西。
答案 1 :(得分:2)
唯一的缺陷是$is_local
行:
$is_local = (strpos($_SERVER['http_host'], 'localhost') !== false);
对于localhostIsAwesome.com
等网站,这可能会评为TRUE。
总的来说,你做这件事的方式实际上相当不错。
另一个建议是使用$_SERVER[ 'SERVER_NAME' ]
答案 2 :(得分:1)
这不是一个坏主意,如果
所以它没有解决像
这样的场景我在项目中使用的做法是设置代码文件,如conf.dev.php,conf.test.php,conf.prod.php用于不同的环境设置,以及一个用于env开关标志的文件,如
$env = 'production';
然后你可以根据$ env开关动态地包含包含env setings的文件,例如:
require_once 'conf.'.$env.'.php';
请记住将conf.dev.php文件包含在git / hg / svn ignore文件中,因此出于安全原因,它不会在团队成员和conf.production.php中出现乱码。
只是我的两分钱。