• Модуль: 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;
		}
	}
}