Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
    #-------------------------------------------------------------------------------
}