function String_Xml_Parse($String, $IsUseCache = TRUE) { #------------------------------------------------------------------------------- # костыль для удаления не-UTF8 символов $String = iconv('UTF-8', 'UTF-8//IGNORE', $String); #------------------------------------------------------------------------------- $Length = Mb_StrLen($String); #------------------------------------------------------------------------------- $IsUseCache = $IsUseCache && $Length > 1024; #------------------------------------------------------------------------------- if ($IsUseCache) { #------------------------------------------------------------------------------- $CacheID = SPrintF('String_XML_Parse[%s]', Md5(Crc32($String))); #------------------------------------------------------------------------------- $Result = CacheManager::get($CacheID); if ($Result) { return $Result; } } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- Debug(SPrintF('[String_XML_Parse]: парсирование строки (%u bytes)', $Length)); #------------------------------------------------------------------------------- $XmlParser = Xml_Parser_Create('UTF-8'); #------------------------------------------------------------------------------- if (!Xml_Parser_Set_Option($XmlParser, XML_OPTION_CASE_FOLDING, FALSE)) { return ERROR | Trigger_Error('[String_Xml_Parse]: не удалось установить опцию парсирования (XML_OPTION_CASE_FOLDING)'); } #------------------------------------------------------------------------------- if (!Xml_Parser_Set_Option($XmlParser, XML_OPTION_SKIP_WHITE, FALSE)) { return ERROR | Trigger_Error('[String_Xml_Parse]: не удалось установить опцию парсирования (XML_OPTION_SKIP_WHITE)'); } #------------------------------------------------------------------------------- if (!Xml_Parse_Into_Struct($XmlParser, $String, $Nodes)) { #------------------------------------------------------------------------------- $ByteIndex = Xml_Get_Current_Byte_Index($XmlParser); #------------------------------------------------------------------------------- Debug(SPrintF('[system/libs/auto/String.php]: xml_error_string = %s', Xml_Error_String(Xml_Get_Error_Code($XmlParser)))); #------------------------------------------------------------------------------- Debug(SPrintF('[system/libs/auto/String.php]: %s', Mb_SubStr($String, $ByteIndex - 100, $ByteIndex + 100))); #------------------------------------------------------------------------------- $Buffer = Mb_SubStr($String, 0, $ByteIndex); #------------------------------------------------------------------------------- $Line = Preg_Match_All("/(\r\n|\n)/sU", $Buffer, $Matches) + 1; #------------------------------------------------------------------------------- return new gException('XML_PARSE_ERROR', SPrintF('%s в линии %u', Xml_Error_String($XmlParser), $Line)); #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- #----------------------------------------------------------------------------- Xml_Parser_Free($XmlParser); #----------------------------------------------------------------------------- $Root = new Tag('__ROOT__'); #----------------------------------------------------------------------------- $Links = array(&$Root); #----------------------------------------------------------------------------- foreach ($Nodes as $Node) { #--------------------------------------------------------------------------- $Current = $Links[Count($Links) - 1]; #--------------------------------------------------------------------------- switch ($Node['type']) { case 'open': #----------------------------------------------------------------------- $Tag = new Tag($Node['tag']); #----------------------------------------------------------------------- if (isset($Node['attributes'])) { $Tag->AddAttribs($Node['attributes']); } #----------------------------------------------------------------------- if (isset($Node['value'])) { #--------------------------------------------------------------------- $Value = $Node['value']; #--------------------------------------------------------------------- if (Trim($Value)) { $Tag->AddChild(new Tag('CDATA', $Value)); } } #----------------------------------------------------------------------- $Current->Childs[] = $Tag; #----------------------------------------------------------------------- $Links[] =& $Current->Childs[Count($Current->Childs) - 1]; break; case 'cdata': #----------------------------------------------------------------------- $Value = $Node['value']; #----------------------------------------------------------------------- if (Trim($Value)) { #--------------------------------------------------------------------- $Tag = new Tag('CDATA', $Value); #--------------------------------------------------------------------- $Current->Childs[] = $Tag; } break; case 'complete': #----------------------------------------------------------------------- $Tag = new Tag($Node['tag']); #----------------------------------------------------------------------- if (isset($Node['attributes'])) { $Tag->AddAttribs($Node['attributes']); } #----------------------------------------------------------------------- if (isset($Node['value'])) { $Tag->AddText($Node['value']); } #----------------------------------------------------------------------- $Current->Childs[] = $Tag; break; case 'close': Array_Pop($Links); break; default: # No more... } } #----------------------------------------------------------------------------- if ($IsUseCache) { CacheManager::add($CacheID, $Root); } #----------------------------------------------------------------------------- return $Root; }
function Cpanel_Get_Domains($Settings) { /****************************************************************************/ $__args_types = array('array'); #----------------------------------------------------------------------------- $__args__ = Func_Get_Args(); eval(FUNCTION_INIT); /****************************************************************************/ $HTTP = array('Address' => $Settings['Params']['IP'], 'Port' => $Settings['Port'], 'Host' => $Settings['Address'], 'Protocol' => $Settings['Protocol'], 'Basic' => SPrintF('%s:%s', $Settings['Login'], $Settings['Password']), 'IsLogging' => $Settings['Params']['IsLogging']); #----------------------------------------------------------------------------- $Request = array('nohtml' => 'y'); #----------------------------------------------------------------------------- $Response = HTTP_Send('/scripts2/listsubdomains', $HTTP, $Request); if (Is_Error($Response)) { return ERROR | @Trigger_Error('[Cpanel_Get_Domains]: не удалось осуществить запрос'); } #----------------------------------------------------------------------------- $Result = array(); #----------------------------------------------------------------------------- foreach (Explode("\n", $Response['Body']) as $Invoice) { #--------------------------------------------------------------------------- if (Preg_Match('/.+\\:.+\\:.+/', $Invoice)) { #------------------------------------------------------------------------- $Invoice = Explode(':', $Invoice); #------------------------------------------------------------------------- if (Count($Invoice) != 3) { continue; } #------------------------------------------------------------------------- $Invoice = Array_Combine(array('Domain', 'User', 'Parkeds'), $Invoice); #------------------------------------------------------------------------- $Domains = array($Invoice['Domain']); #------------------------------------------------------------------------- $Parkeds = Explode('|', $Invoice['Parkeds']); #------------------------------------------------------------------------- Array_Pop($Parkeds); #------------------------------------------------------------------------- foreach ($Parkeds as $Parked) { #----------------------------------------------------------------------- $Parked = Explode('=', $Parked); #----------------------------------------------------------------------- if (Count($Parked) != 2) { continue; } #----------------------------------------------------------------------- $Parked = Array_Combine(array('Domain1', 'Domain2'), $Parked); #----------------------------------------------------------------------- $Domain2 = $Parked['Domain2']; #----------------------------------------------------------------------- if ($Parked['Domain1'] || $Domain2) { #--------------------------------------------------------------------- if (StrLen($Domain2) > 1) { #------------------------------------------------------------------- $Domain2 = Explode(',', $Domain2); #------------------------------------------------------------------- Array_Pop($Domain2); #------------------------------------------------------------------- foreach ($Domain2 as $Domain) { $Domains[] = $Domain; } } else { $Domains[] = $Parked['Domain1']; } } } #------------------------------------------------------------------------- $Result[$Invoice['User']] = $Domains; } } #----------------------------------------------------------------------------- $Request = array('nohtml' => 'y'); #----------------------------------------------------------------------------- $Response = HTTP_Send('/scripts2/listparked', $HTTP, $Request); if (Is_Error($Response)) { return ERROR | @Trigger_Error('[Cpanel_Get_Domains]: не удалось осуществить запрос'); } #----------------------------------------------------------------------------- foreach (Explode("\n", $Response['Body']) as $Invoice) { #--------------------------------------------------------------------------- if (Preg_Match('/.+\\:.+\\:.+/', $Invoice)) { #------------------------------------------------------------------------- $Invoice = Explode(':', $Invoice); #------------------------------------------------------------------------- if (Count($Invoice) != 3) { continue; } #------------------------------------------------------------------------- $Invoice = Array_Combine(array('Domain', 'User', 'Parkeds'), $Invoice); #------------------------------------------------------------------------- $User = $Invoice['User']; #------------------------------------------------------------------------- if (isset($Result[$User])) { $Result[$User] = array(); } #------------------------------------------------------------------------- $Result[$User][] = $Invoice['Domain']; } } #----------------------------------------------------------------------------- $Request = array('viewall' => 1, 'nohtml' => 'y'); #----------------------------------------------------------------------------- $Response = HTTP_Send('/scripts2/listaccts', $HTTP, $Request); if (Is_Error($Response)) { return ERROR | @Trigger_Error('[Cpanel_Get_Domains]: не удалось осуществить запрос'); } #----------------------------------------------------------------------------- foreach (Explode("\n", $Response['Body']) as $Invoice) { #--------------------------------------------------------------------------- if (Preg_Match('/.+\\=.+\\,.+\\,.+/', $Invoice)) { #------------------------------------------------------------------------- $Invoice = Array_Combine(array('User', 'Domain'), Explode('=', SubStr($Invoice, 0, StrPos($Invoice, ',')))); #------------------------------------------------------------------------- $User = $Invoice['User']; #------------------------------------------------------------------------- if (isset($Result[$User])) { $Result[$User] = array(); } #------------------------------------------------------------------------- $Result[$User][] = $Invoice['Domain']; } } #----------------------------------------------------------------------------- if (!Count($Result)) { return new gException('DOMAINS_NOT_FOUND', 'Домены не найдены'); } #----------------------------------------------------------------------------- return $Result; }
function DB_Commit($TransactionID) { /******************************************************************************/ $__args_types = array('string'); #------------------------------------------------------------------------------- $__args__ = Func_Get_Args(); eval(FUNCTION_INIT); /******************************************************************************/ $Transactions =& Link_Get('Transactions', 'array'); #------------------------------------------------------------------------------- if (!Count($Transactions)) { return ERROR | @Trigger_Error('[DB_Commit]: транзакций не обнаружено'); } #------------------------------------------------------------------------------- if ($Transactions[Count($Transactions) - 1] != $TransactionID) { #------------------------------------------------------------------------------- Debug(SPrintF('[system/libs/auto/DB]: Transactions = %s', Implode(',', $Transactions))); #------------------------------------------------------------------------------- return ERROR | @Trigger_Error(SPrintF('[DB_Commit]: точка применения транзакции (%s) не найдена', $TransactionID)); #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- if (Count($Transactions) < 2) { #------------------------------------------------------------------------------- $Result = DB_Query('COMMIT'); #------------------------------------------------------------------------------- switch (ValueOf($Result)) { case 'error': return ERROR | @Trigger_Error('[DB_Commit]: невозможно завершить транзакцию'); case 'true': #------------------------------------------------------------------------------- $Result = DB_Query('SET AUTOCOMMIT=1'); #------------------------------------------------------------------------------- switch (ValueOf($Result)) { case 'error': return ERROR | @Trigger_Error('[DB_Commit]: невозможно осуществить запрос для установки режима транзакций'); case 'true': # No more... break 2; default: return ERROR | @Trigger_Error(101); } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- default: return ERROR | @Trigger_Error(101); } #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- Array_Pop($Transactions); #------------------------------------------------------------------------------- return TRUE; #------------------------------------------------------------------------------- }