iTop切换environment

基于 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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注