基于 iTop 2.7.0-2 做定制时,如果 PHP 代码有错误,用 toolkit 更新时可能导致停留在 env-toolkit
环境,即:
- 在
extensions
下修复报错的代码,用 toolkit 依然不能更新,会报错env-toolkit/xxx/xxx.php
下有错误 - 删除
env-toolkit
目录,会导致无法进入,程序会读取env-toolkit
下的文件,而不是env-production
相找到关代码,在 application/startup.inc.php
中:
session_name('itop-'.md5(APPROOT));
session_start();
$sSwitchEnv = utils::ReadParam('switch_env', null);
$bAllowCache = true;
if [1]$sSwitchEnv != null) && (file_exists(APPCONF.$sSwitchEnv.'/'.ITOP_CONFIG_FILE && isset($_SESSION['itop_env']) && ($_SESSION['itop_env'] !== $sSwitchEnv))
{
$_SESSION['itop_env'] = $sSwitchEnv;
$sEnv = $sSwitchEnv;
$bAllowCache = false;
// Reset the opcache since otherwise the PHP "model" files may still be cached !!
if (function_exists('opcache_reset'))
{
// Zend opcode cache
opcache_reset();
}
if (function_exists('apc_clear_cache'))
{
// APC(u) cache
apc_clear_cache();
}
// TODO: reset the credentials as well ??
}
else if (isset($_SESSION['itop_env']))
{
$sEnv = $_SESSION['itop_env'];
}
else
{
$sEnv = ITOP_DEFAULT_ENV;
$_SESSION['itop_env'] = ITOP_DEFAULT_ENV;
}
用 var_dump
打印当前环境,可以看到是 toolkit
,不清楚具体是什么原因,但是从代码可知,加上参数 switch_env=produciton
即可强制切换到 production
环境,解决以上问题。
参考资料
↑1 | $sSwitchEnv != null) && (file_exists(APPCONF.$sSwitchEnv.'/'.ITOP_CONFIG_FILE |
---|
发表回复