- Модуль: cluster
- Путь к файлу: ~/bitrix/modules/cluster/classes/general/memcache.php
- Класс: CClusterMemcache
- Вызов: CClusterMemcache::SaveConfig
static function SaveConfig($arServerList)
{
self::$arList = false;
$isOnline = false;
$content = '<'.'?
define("BX_MEMCACHE_CLUSTER", "'.EscapePHPString(CMain::GetServerUniqID()).'");
$arList = array(
';
$defGroup = 1;
$arGroups = array();
$rsGroups = CClusterGroup::GetList(array("ID" => "DESC"));
while($arGroup = $rsGroups->Fetch())
$defGroup = $arGroups[$arGroup["ID"]] = intval($arGroup["ID"]);
foreach($arServerList as $i => $arServer)
{
$isOnline |= ($arServer["STATUS"] == "ONLINE");
$GROUP_ID = intval($arServer["GROUP_ID"]);
if(!array_key_exists($arServer["GROUP_ID"], $arGroups))
$GROUP_ID = $defGroup;
$content .= "t".intval($i)." => array(n";
$content .= "tt'ID' => "".EscapePHPString($arServer["ID"])."",n";
$content .= "tt'GROUP_ID' => ".$GROUP_ID.",n";
$content .= "tt'HOST' => "".EscapePHPString($arServer["HOST"])."",n";
$content .= "tt'PORT' => ".intval($arServer["PORT"]).",n";
$content .= "tt'WEIGHT' => ".intval($arServer["WEIGHT"]).",n";
if($arServer["STATUS"] == "ONLINE")
$content .= "tt'STATUS' => "ONLINE",n";
elseif($arServer["STATUS"] == "OFFLINE")
$content .= "tt'STATUS' => "OFFLINE",n";
else
$content .= "tt'STATUS' => "READY",n";
$content .= "t),n";
}
$content .= ');
?'.'>';
file_put_contents(
$_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/cluster/memcache.php"
,$content
);
bx_accelerator_reset();
self::$systemConfigurationUpdate = null;
$cache = BitrixMainConfigConfiguration::getValue('cache');
if ($isOnline)
{
if (
!is_array($cache)
|| !isset($cache['type'])
|| !is_array($cache['type'])
|| !isset($cache['type']['class_name'])
|| !($cache['type']['class_name'] === 'CPHPCacheMemcacheCluster')
)
{
BitrixMainConfigConfiguration::setValue('cache', array(
'type' => array(
'class_name' => 'CPHPCacheMemcacheCluster',
'extension' => 'memcache',
'required_file' => 'modules/cluster/classes/general/memcache_cache.php',
),
));
self::$systemConfigurationUpdate = true;
}
}
else
{
if (
is_array($cache)
&& isset($cache['type'])
&& is_array($cache['type'])
&& isset($cache['type']['class_name'])
&& ($cache['type']['class_name'] === 'CPHPCacheMemcacheCluster')
)
{
BitrixMainConfigConfiguration::setValue('cache', null);
self::$systemConfigurationUpdate = false;
}
}
}