Разбор файлов libconfig в PHP - PullRequest
3 голосов
/ 26 марта 2012

Мне нужно читать и записывать переменные из отформатированного в libconfig файла на PHP.Но я нигде не могу найти библиотеку для этого.Конечно, я знаю о библиотеке C / C ++, но для ее использования нам нужно написать расширение.

Существует ли такая библиотека или расширение?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018
    function parseLibconfig_section( &$Array, &$LineID ){
    $RetVal = array(); // Initializing return value as empty array
    while( count( $Array ) > $LineID ){ // While not riches last line
        if( stripos( $Array[$LineID] , ':' ) !== false ){ 
            // In case we have section Title - just remember it
            // The section will parsed later at section begin (next loop)
            $TArr = explode( ' ', trim( $Array[$LineID] ) );
            $CS = $TArr[0]; 
        } elseif( stripos( $Array[$LineID] , '{' ) !== false ){
            // We at section open Tag -> call recurrent function to parse 
            // from next line of input data
            $LineID++;
            $RetVal[$CS] = parseLibconfig_section( $Array, $LineID );
        } elseif( stripos( $Array[$LineID] , '}' ) !== false ){
            // End of section - return back from subsection
            break;
        } else {
            // nor section begin/ nor section end - parse line as field
            // by standard PHP function parse_ini_string (please see PHP ref)
            $TVrr = parse_ini_string( trim( $Array[$LineID] ) );
            if( count( $TVrr ) ){
                // fill return array by fields from parse_ini_string function
                foreach( $TVrr as $Key => $Val ) $RetVal[$Key] = $Val;
            };
        };
        // Next please!
        $LineID++;
    };
    return $RetVal;
};

function parseLibconfig( $FName ){
    $RetVal = array();       // Initializing return value as empty array
    $Data = file( $FName );  // Reading content of libconfig's
                             // config file into array of lines
    if( count($Data)> 0 ){   // If we have some data read then - working
        $Index = 0;          // Init an variable to pass by reference into
                             // function that will be called recursively
        $RetVal = parseLibconfig_section( $Data, $Index );
    };
    return $RetVal;
};
0 голосов
/ 02 марта 2013

Используя API C или C ++, подробно описанный в документации , напишите небольшую программу для преобразования файла формата libconfig в формат JSON или XML (или, если вы любите приключения, в формат сериализации PHP), а затемиспользуйте библиотеки PHP для обработки этого вывода.Если файл не изменился, вы даже можете кэшировать преобразованную форму.

Вы можете вызывать внешние программы из PHP и получать вывод, используя exec () .

Конечно, лучшим решением было бы написать PHP-привязки для библиотеки, но в зависимости от того, насколько важна эта библиотека для вашего приложения, это, вероятно, не стоит.

Глядя на формат, я не рекомендовал бы пытатьсяиспользовать регулярные выражения для разбора файла.

...